sync with master
authorJinkun Jang <jinkun.jang@samsung.com>
Mon, 18 Mar 2013 05:53:48 +0000 (14:53 +0900)
committerJinkun Jang <jinkun.jang@samsung.com>
Mon, 18 Mar 2013 05:53:48 +0000 (14:53 +0900)
345 files changed:
CMakeLists.txt [new file with mode: 0644]
LICENSE.Flora [new file with mode: 0644]
NOTICE [new file with mode: 0644]
inc/CallActiveCallForm.h [new file with mode: 0644]
inc/CallApp.h [new file with mode: 0644]
inc/CallAppFormFactory.h [new file with mode: 0644]
inc/CallAppFrame.h [new file with mode: 0644]
inc/CallAppMainForm.h [new file with mode: 0644]
inc/CallAppUtility.h [new file with mode: 0644]
inc/CallBaseForm.h [new file with mode: 0644]
inc/CallButtonsPanel.h [new file with mode: 0644]
inc/CallCommonUtils.h [new file with mode: 0644]
inc/CallConfCallerListForm.h [new file with mode: 0644]
inc/CallCustomItemBgElement.h [new file with mode: 0644]
inc/CallDtmfKeypadPanel.h [new file with mode: 0644]
inc/CallEndCallForm.h [new file with mode: 0644]
inc/CallErrorMsgPopup.h [new file with mode: 0644]
inc/CallIAppStateChangeListner.h [new file with mode: 0644]
inc/CallICalllogChangeListener.h [new file with mode: 0644]
inc/CallIPopupItemSelectListener.h [new file with mode: 0644]
inc/CallISettingsEventListener.h [new file with mode: 0644]
inc/CallITelephonyEventListener.h [new file with mode: 0644]
inc/CallIncomingCallForm.h [new file with mode: 0644]
inc/CallInfo.h [new file with mode: 0644]
inc/CallOptionPopup.h [new file with mode: 0644]
inc/CallPanelFactory.h [new file with mode: 0644]
inc/CallPhoneFormFactory.h [new file with mode: 0644]
inc/CallPresentationModel.h [new file with mode: 0644]
inc/CallRejectInfo.h [new file with mode: 0644]
inc/CallSceneRegister.h [new file with mode: 0644]
inc/CallSettingDataService.h [new file with mode: 0644]
inc/CallSettingsConstants.h [new file with mode: 0644]
inc/CallSettingsManager.h [new file with mode: 0644]
inc/CallSettingsPresentationModel.h [new file with mode: 0644]
inc/CallSoundManager.h [new file with mode: 0644]
inc/CallSpeedDialInfo.h [new file with mode: 0644]
inc/CallSpeedDialPopup.h [new file with mode: 0644]
inc/CallTelephonyManager.h [new file with mode: 0644]
inc/CallTypes.h [new file with mode: 0644]
inc/CalllogManager.h [new file with mode: 0644]
lib/nofile.dummy [new file with mode: 0644]
manifest.xml [new file with mode: 0644]
packaging/apps.Call.spec [new file with mode: 0644]
res/eng-GB.xml [new file with mode: 0644]
res/screen-density-xhigh/00_Nocontents_text.png [new file with mode: 0644]
res/screen-density-xhigh/00_button_01_normal.png [new file with mode: 0644]
res/screen-density-xhigh/00_button_04_dim.png [new file with mode: 0644]
res/screen-density-xhigh/00_button_04_normal.png [new file with mode: 0644]
res/screen-density-xhigh/00_button_04_normal_focus.png [new file with mode: 0644]
res/screen-density-xhigh/00_button_06_normal.9.png [new file with mode: 0644]
res/screen-density-xhigh/00_button_06_press.9.png [new file with mode: 0644]
res/screen-density-xhigh/00_button_cancel_normal.png [new file with mode: 0644]
res/screen-density-xhigh/00_button_cancel_press.png [new file with mode: 0644]
res/screen-density-xhigh/00_button_normal_bg.9.png [new file with mode: 0644]
res/screen-density-xhigh/00_icon_Back.png [new file with mode: 0644]
res/screen-density-xhigh/00_icon_Back_press.png [new file with mode: 0644]
res/screen-density-xhigh/00_index list_bg.png [new file with mode: 0644]
res/screen-density-xhigh/00_indexlist_icon_opened.png [new file with mode: 0644]
res/screen-density-xhigh/00_list_expand_closed.png [new file with mode: 0644]
res/screen-density-xhigh/00_list_expand_closed_press.png [new file with mode: 0644]
res/screen-density-xhigh/00_list_expand_opened.png [new file with mode: 0644]
res/screen-density-xhigh/00_list_expand_opened_press.png [new file with mode: 0644]
res/screen-density-xhigh/00_popup_bg_ef.9.png [new file with mode: 0644]
res/screen-density-xhigh/00_popup_bubble_tail_bottom.png [new file with mode: 0644]
res/screen-density-xhigh/00_popup_bubble_tail_top.png [new file with mode: 0644]
res/screen-density-xhigh/00_reorder_group_list_bg.png [new file with mode: 0644]
res/screen-density-xhigh/00_volume_icon_Mute.png [new file with mode: 0644]
res/screen-density-xhigh/00_winset_Back.png [new file with mode: 0644]
res/screen-density-xhigh/00_winset_more.png [new file with mode: 0644]
res/screen-density-xhigh/00_winset_more_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_Back_btn_normal.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_Back_btn_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_Incoming call_BG_01.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_Not saved contact BG.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_Reject_message_arrow_01.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_Reject_message_arrow_02.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_Reject_message_bg.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_accept_left.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_accept_left_dial_answer.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_accept_left_dial_answer_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_accept_left_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_accept_left_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_animation_bg.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_arrow_g.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_arrow_r.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_bg.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_btn_back.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_btn_create.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_button_01_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_button_02_normal.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_button_03_normal.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_button_05_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_button_bg.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_button_call.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_button_call_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_button_end_call.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_button_hold_01.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_button_hold_01_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_button_hold_normal.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_button_hold_normal_01.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_button_hold_normal_01_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_button_hold_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_button_more.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_button_more_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_button_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_call_ID_thumbnail_366x366.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_call_ID_thumbnail_shadow_224x224.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_call_ID_thumbnail_shadow_388x388.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_call_bg.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_call_bg02.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_call_default_caller ID_720x720.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_call_group_caller ID_720x720.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_call_thumbnail_bg.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_caller_bg.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_calling_BG_01.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_conference_call_btn_01.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_conference_call_btn_01_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_conference_call_btn_02.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_conference_call_btn_02_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_conference_end.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_conference_end_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_conference_split.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_conference_split_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_contact_btn.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_contact_btn_icon.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_contact_btn_icon_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_contact_btn_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_end call_BG_01.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_end call_default_caller ID_366x366.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_end call_default_caller ID_720x370.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_end call_default_caller ID_720x720.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_Hide.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_Hide_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_Hide_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_Hide_press_wh.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_Pause.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_Play.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_REC_78x78.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_Reject_with_Message.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_add.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_add_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_add_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_add_press_wh.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_button_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_call.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_call_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_contacts.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_contacts_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_contacts_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_contacts_press_wh.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_end_call.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_end_call_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_end_call_press_wh.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_headset.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_headset_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_headset_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_headset_press_wh.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_hold.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_hold_74x74.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_hold_74x74_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_hold_78x78.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_hold_78x78_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_hold_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_hold_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_hold_press_wh.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_join.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_join_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_join_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_join_press_wh.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_keypad.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_keypad_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_keypad_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_keypad_press_wh.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_message.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_message_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_message_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_message_press_wh.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_more.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_more_Manage conference call.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_more_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_mute.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_mute_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_mute_on.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_mute_on_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_mute_on_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_mute_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_mute_press_wh.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_record.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_record_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_record_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_record_press_wh.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_speaker.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_speaker_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_speaker_on.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_speaker_on_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_speaker_on_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_speaker_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_speaker_press_wh.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_stop.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_stop_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_stop_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_stop_press_wh.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_swap.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_swap_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_unhold.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_unhold_74x74.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_unhold_74x74_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_unhold_78x78.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_unhold_78x78_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_unhold_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_unhold_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_unhold_press_wh.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_video call.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_video call_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_video call_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_video call_press_wh.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_voice call.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_voice call_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_voice call_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_icon_voice call_press_wh.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_keypad_btn_icon.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_keypad_btn_input.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_keypad_btn_normal.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_keypad_btn_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_lock_icon_accept.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_lock_icon_accept_arrow.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_lock_icon_accept_arrow_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_lock_icon_accept_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_lock_icon_reject.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_lock_icon_reject_arrow.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_lock_icon_reject_arrow_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_lock_icon_reject_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_multil_default_caller ID_366x366.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_multil_default_caller ID_720x370.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_multil_default_caller ID_720x720.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_outgoingcall_No caller ID.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_popup_arrow.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_popup_bg.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_reject_right.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_reject_right_dial_decline.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_reject_right_dial_decline_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_reject_right_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-1_voice_call_icon.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_dialer_btn_1line_bg.9.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_dialer_btn_1line_bg.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_dialer_btn_2line_bg.9.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_dialer_btn_2line_bg.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_dialer_btn_3line_bg.9.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_dialer_btn_3line_bg.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_dialer_btn_4line_bg.9.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_dialer_btn_4line_bg.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_dialer_btn_5line_bg.9.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_dialer_btn_5line_bg.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_dialer_btn_call_bg.9.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_dialer_btn_call_bg.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_dialer_btn_option_bg.9.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_dialer_btn_option_bg.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_dialer_btn_option_press.9.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_dialer_btn_option_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_dialer_btn_press.9.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_dialer_btn_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_dialer_icon_01.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_dialer_icon_01_press.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_dialer_icon_clear.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_dialer_icon_star.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_dialer_search_field_bg.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_icon_call.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_icon_clear.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_icon_message.png [new file with mode: 0644]
res/screen-density-xhigh/C01-3_icon_voicecall.png [new file with mode: 0644]
res/screen-density-xhigh/C01-4_btn_icon_call.png [new file with mode: 0644]
res/screen-density-xhigh/C01-4_btn_icon_call_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-4_btn_icon_message.png [new file with mode: 0644]
res/screen-density-xhigh/C01-4_btn_icon_message_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-4_btn_icon_video_call.png [new file with mode: 0644]
res/screen-density-xhigh/C01-4_btn_icon_video_call_dim.png [new file with mode: 0644]
res/screen-density-xhigh/C01-4_controlbar_icon_cancel.png [new file with mode: 0644]
res/screen-density-xhigh/C01-4_controlbar_icon_delete.png [new file with mode: 0644]
res/screen-density-xhigh/C01-4_controlbar_icon_done.png [new file with mode: 0644]
res/screen-density-xhigh/C01-4_controlbar_icon_save.png [new file with mode: 0644]
res/screen-density-xhigh/C01-4_icon_Blocked(Auto-rejected).png [new file with mode: 0644]
res/screen-density-xhigh/C01-4_icon_Blocked.png [new file with mode: 0644]
res/screen-density-xhigh/C01-4_icon_call_blocked.png [new file with mode: 0644]
res/screen-density-xhigh/C01-4_icon_dialed.png [new file with mode: 0644]
res/screen-density-xhigh/C01-4_icon_message_blocked.png [new file with mode: 0644]
res/screen-density-xhigh/C01-4_icon_missed-call.png [new file with mode: 0644]
res/screen-density-xhigh/C01-4_icon_received.png [new file with mode: 0644]
res/screen-density-xhigh/C01-4_icon_rejected.png [new file with mode: 0644]
res/screen-density-xhigh/C01-5_icon_cancel.png [new file with mode: 0644]
res/screen-density-xhigh/C01-5_icon_speeddial_check.png [new file with mode: 0644]
res/screen-density-xhigh/C01-5_icon_voicecall.png [new file with mode: 0644]
res/screen-density-xhigh/C01-5_speeddial_thumbnail_213x213.png [new file with mode: 0644]
res/screen-density-xhigh/C01_3_dialer_icon_option.png [new file with mode: 0644]
res/screen-density-xhigh/M01_contact_default_image.png [new file with mode: 0644]
res/screen-density-xhigh/M01_contact_default_image_press.png [new file with mode: 0644]
res/screen-density-xhigh/more.png [new file with mode: 0644]
res/screen-density-xhigh/more_press.png [new file with mode: 0644]
res/screen-size-normal/IDF_FORM.xml [new file with mode: 0644]
res/screen-size-normal/IDL_CALL_FORM.xml [new file with mode: 0644]
res/screen-size-normal/IDL_CALL_OPTION_POPUP.xml [new file with mode: 0644]
res/screen-size-normal/IDL_CONFCALL_FORM.xml [new file with mode: 0644]
res/screen-size-normal/IDL_CONFCALL_LIST_FORM.xml [new file with mode: 0644]
res/screen-size-normal/IDL_DTMF_KEYPAD_PANEL.xml [new file with mode: 0644]
res/screen-size-normal/IDL_DTMF_KEYS_PANEL.xml [new file with mode: 0644]
res/screen-size-normal/IDL_EMERGENCY_CALL_FORM.xml [new file with mode: 0644]
res/screen-size-normal/IDL_ENDCALLKEYS_PANEL.xml [new file with mode: 0644]
res/screen-size-normal/IDL_END_CALL_FORM.xml [new file with mode: 0644]
res/screen-size-normal/IDL_ERROR_MSG_POPUP.xml [new file with mode: 0644]
res/screen-size-normal/IDL_INCOMING_CALL_FORM.xml [new file with mode: 0644]
res/screen-size-normal/IDL_KEYS_PANEL.xml [new file with mode: 0644]
res/screen-size-normal/IDL_MULTIPLE_CALL_FORM.xml [new file with mode: 0644]
res/screen-size-normal/IDL_OUTCALL_FORM.xml [new file with mode: 0644]
res/screen-size-normal/IDL_OUT_EMERGENCYCALL_FORM.xml [new file with mode: 0644]
shared/data/nofile.dummy [new file with mode: 0644]
shared/res/screen-density-xhigh/nofile.dummy [new file with mode: 0644]
shared/trusted/nofile.dummy [new file with mode: 0644]
src/CallActiveCallForm.cpp [new file with mode: 0644]
src/CallApp.cpp [new file with mode: 0644]
src/CallAppEntry.cpp [new file with mode: 0644]
src/CallAppFrame.cpp [new file with mode: 0644]
src/CallAppMainForm.cpp [new file with mode: 0644]
src/CallAppUtility.cpp [new file with mode: 0644]
src/CallBaseForm.cpp [new file with mode: 0644]
src/CallButtonsPanel.cpp [new file with mode: 0644]
src/CallCommonUtils.cpp [new file with mode: 0644]
src/CallConfCallerListForm.cpp [new file with mode: 0644]
src/CallDtmfKeypadPanel.cpp [new file with mode: 0644]
src/CallEndCallForm.cpp [new file with mode: 0644]
src/CallErrorMsgPopup.cpp [new file with mode: 0644]
src/CallFormFactory.cpp [new file with mode: 0644]
src/CallIncomingCallForm.cpp [new file with mode: 0644]
src/CallInfo.cpp [new file with mode: 0644]
src/CallOptionPopup.cpp [new file with mode: 0644]
src/CallPanelFactory.cpp [new file with mode: 0644]
src/CallPresentationModel.cpp [new file with mode: 0644]
src/CallRejectInfo.cpp [new file with mode: 0644]
src/CallSceneRegister.cpp [new file with mode: 0644]
src/CallSettingDataService.cpp [new file with mode: 0644]
src/CallSettingsConstants.cpp [new file with mode: 0644]
src/CallSettingsManager.cpp [new file with mode: 0644]
src/CallSettingsPresentationModel.cpp [new file with mode: 0644]
src/CallSoundManager.cpp [new file with mode: 0644]
src/CallTelephonyManager.cpp [new file with mode: 0644]
src/CallTypes.cpp [new file with mode: 0644]
src/CalllogManager.cpp [new file with mode: 0644]

diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644 (file)
index 0000000..4d951bb
--- /dev/null
@@ -0,0 +1,44 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+# Target name and PKGID
+## TODO : set application name and ID
+SET(this_target Call)
+SET(PKGID nI2PLNdTwi)
+
+# include directory
+INCLUDE_DIRECTORIES(
+       /usr/include/glib-2.0
+       /usr/lib/glib-2.0/include
+       /usr/include/osp
+       /usr/include/vconf
+       /usr/include/media
+       /usr/include/telephony-client
+       /usr/include/contacts-svc
+       inc
+  )
+
+# Source files
+FILE(GLOB ${this_target}_SOURCE_FILES 
+        src/*.cpp
+)
+
+SET(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fPIE")
+
+
+# Create executable
+SET(CMAKE_EXECUTABLE_SUFFIX ".exe")
+ADD_EXECUTABLE (${this_target} ${${this_target}_SOURCE_FILES})
+
+# Set link libraries and link options
+## TODO : add more link libraries and options
+TARGET_LINK_LIBRARIES(${this_target} -L/usr/lib/osp osp-appfw osp-uifw osp-social osp-messaging osp-media osp-image osp-image-core osp-telephony)
+TARGET_LINK_LIBRARIES(${this_target} -L/usr/lib capi-media-sound-manager SLP-tapi vconf  contacts-service2)
+TARGET_LINK_LIBRARIES(${this_target} -Xlinker --allow-shlib-undefined -pthread -pie)
+
+# Copy info, data, res, and icons directories
+INSTALL(TARGETS ${this_target} DESTINATION ../usr/apps/${PKGID}/bin)
+
+# Copy resource
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/manifest.xml DESTINATION ../usr/apps/${PKGID}/info)
+INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/res DESTINATION ../usr/apps/${PKGID})
+INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/shared DESTINATION ../usr/apps/${PKGID})
diff --git a/LICENSE.Flora b/LICENSE.Flora
new file mode 100644 (file)
index 0000000..9c95663
--- /dev/null
@@ -0,0 +1,206 @@
+Flora License
+
+Version 1.0, May, 2012
+
+http://floralicense.org/license/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction,
+and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by
+the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and
+all other entities that control, are controlled by, or are
+under common control with that entity. For the purposes of
+this definition, "control" means (i) the power, direct or indirect,
+to cause the direction or management of such entity,
+whether by contract or otherwise, or (ii) ownership of fifty percent (50%)
+or more of the outstanding shares, or (iii) beneficial ownership of
+such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity
+exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation source,
+and configuration files.
+
+"Object" form shall mean any form resulting from mechanical
+transformation or translation of a Source form, including but
+not limited to compiled object code, generated documentation,
+and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form,
+made available under the License, as indicated by a copyright notice
+that is included in or attached to the work (an example is provided
+in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form,
+that is based on (or derived from) the Work and for which the editorial
+revisions, annotations, elaborations, or other modifications represent,
+as a whole, an original work of authorship. For the purposes of this License,
+Derivative Works shall not include works that remain separable from,
+or merely link (or bind by name) to the interfaces of, the Work and
+Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original
+version of the Work and any modifications or additions to that Work or
+Derivative Works thereof, that is intentionally submitted to Licensor
+for inclusion in the Work by the copyright owner or by an individual or
+Legal Entity authorized to submit on behalf of the copyright owner.
+For the purposes of this definition, "submitted" means any form of
+electronic, verbal, or written communication sent to the Licensor or
+its representatives, including but not limited to communication on
+electronic mailing lists, source code control systems, and issue
+tracking systems that are managed by, or on behalf of, the Licensor
+for the purpose of discussing and improving the Work, but excluding
+communication that is conspicuously marked or otherwise designated
+in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity
+on behalf of whom a Contribution has been received by Licensor and
+subsequently incorporated within the Work.
+
+"Tizen Certified Platform" shall mean a software platform that complies
+with the standards set forth in the Compatibility Definition Document
+and passes the Compatibility Test Suite as defined from time to time
+by the Tizen Technical Steering Group and certified by the Tizen
+Association or its designated agent.
+
+2. Grant of Copyright License.  Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+copyright license to reproduce, prepare Derivative Works of,
+publicly display, publicly perform, sublicense, and distribute the
+Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License.  Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+(except as stated in this section) patent license to make, have made,
+use, offer to sell, sell, import, and otherwise transfer the Work
+solely as incorporated into a Tizen Certified Platform, where such
+license applies only to those patent claims licensable by such
+Contributor that are necessarily infringed by their Contribution(s)
+alone or by combination of their Contribution(s) with the Work solely
+as incorporated into a Tizen Certified Platform to which such
+Contribution(s) was submitted. If You institute patent litigation
+against any entity (including a cross-claim or counterclaim
+in a lawsuit) alleging that the Work or a Contribution incorporated
+within the Work constitutes direct or contributory patent infringement,
+then any patent licenses granted to You under this License for that
+Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution.  You may reproduce and distribute copies of the
+Work or Derivative Works thereof pursuant to the copyright license
+above, in any medium, with or without modifications, and in Source or
+Object form, provided that You meet the following conditions:
+
+  1. You must give any other recipients of the Work or Derivative Works
+     a copy of this License; and
+  2. You must cause any modified files to carry prominent notices stating
+     that You changed the files; and
+  3. You must retain, in the Source form of any Derivative Works that
+     You distribute, all copyright, patent, trademark, and attribution
+     notices from the Source form of the Work, excluding those notices
+     that do not pertain to any part of the Derivative Works; and
+  4. If the Work includes a "NOTICE" text file as part of its distribution,
+     then any Derivative Works that You distribute must include a readable
+     copy of the attribution notices contained within such NOTICE file,
+     excluding those notices that do not pertain to any part of
+     the Derivative Works, in at least one of the following places:
+     within a NOTICE text file distributed as part of the Derivative Works;
+     within the Source form or documentation, if provided along with the
+     Derivative Works; or, within a display generated by the Derivative Works,
+     if and wherever such third-party notices normally appear.
+     The contents of the NOTICE file are for informational purposes only
+     and do not modify the License.
+
+You may add Your own attribution notices within Derivative Works
+that You distribute, alongside or as an addendum to the NOTICE text
+from the Work, provided that such additional attribution notices
+cannot be construed as modifying the License. You may add Your own
+copyright statement to Your modifications and may provide additional or
+different license terms and conditions for use, reproduction, or
+distribution of Your modifications, or for any such Derivative Works
+as a whole, provided Your use, reproduction, and distribution of
+the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise,
+any Contribution intentionally submitted for inclusion in the Work
+by You to the Licensor shall be under the terms and conditions of
+this License, without any additional terms or conditions.
+Notwithstanding the above, nothing herein shall supersede or modify
+the terms of any separate license agreement you may have executed
+with Licensor regarding such Contributions.
+
+6. Trademarks.  This License does not grant permission to use the trade
+names, trademarks, service marks, or product names of the Licensor,
+except as required for reasonable and customary use in describing the
+origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or
+agreed to in writing, Licensor provides the Work (and each
+Contributor provides its Contributions) on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+implied, including, without limitation, any warranties or conditions
+of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+PARTICULAR PURPOSE. You are solely responsible for determining the
+appropriateness of using or redistributing the Work and assume any
+risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory,
+whether in tort (including negligence), contract, or otherwise,
+unless required by applicable law (such as deliberate and grossly
+negligent acts) or agreed to in writing, shall any Contributor be
+liable to You for damages, including any direct, indirect, special,
+incidental, or consequential damages of any character arising as a
+result of this License or out of the use or inability to use the
+Work (including but not limited to damages for loss of goodwill,
+work stoppage, computer failure or malfunction, or any and all
+other commercial damages or losses), even if such Contributor
+has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing
+the Work or Derivative Works thereof, You may choose to offer,
+and charge a fee for, acceptance of support, warranty, indemnity,
+or other liability obligations and/or rights consistent with this
+License. However, in accepting such obligations, You may act only
+on Your own behalf and on Your sole responsibility, not on behalf
+of any other Contributor, and only if You agree to indemnify,
+defend, and hold each Contributor harmless for any liability
+incurred by, or claims asserted against, such Contributor by reason
+of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Flora License to your work
+
+To apply the Flora License to your work, attach the following
+boilerplate notice, with the fields enclosed by brackets "[]"
+replaced with your own identifying information. (Don't include
+the brackets!) The text should be enclosed in the appropriate
+comment syntax for the file format. We also recommend that a
+file or class name and description of purpose be included on the
+same "printed page" as the copyright notice for easier
+identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Flora License, Version 1.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://floralicense.org/license/
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
diff --git a/NOTICE b/NOTICE
new file mode 100644 (file)
index 0000000..9ec42be
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,3 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Except as noted, this software is licensed under Flora License, Version 1.
+Please, see the LICENSE.Flora file for Flora License, Version 1 terms and conditions.
\ No newline at end of file
diff --git a/inc/CallActiveCallForm.h b/inc/CallActiveCallForm.h
new file mode 100644 (file)
index 0000000..4209002
--- /dev/null
@@ -0,0 +1,137 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallActiveCallForm.h
+ * @brief              This is the header file for the %ActiveCallForm class.
+ *
+ * This header file contains the declarations for %ActiveCallForm class.
+ */
+#ifndef _PHN_ACTIVE_CALL_FORM_H_
+#define _PHN_ACTIVE_CALL_FORM_H_
+
+#include <FBase.h>
+#include <FUi.h>
+#include "CallBaseForm.h"
+
+class CallButtonsPanel;
+class DtmfKeyPadPanel;
+class CallInfo;
+
+/**
+ * @class ActiveCallForm
+ * @brief This class presents a form based UI for dialing call, active call, conference call,
+ *     single active call, multiple active call scenarios.
+ *
+ */
+class ActiveCallForm
+       : public BaseForm
+       , public Tizen::Ui::Controls::IListViewItemEventListener
+       , public Tizen::Ui::Controls::IListViewItemProvider
+       , public Tizen::Ui::Scenes::ISceneEventListener
+       , public Tizen::Base::Runtime::ITimerEventListener
+       , public Tizen::Ui::IOrientationEventListener
+{
+public:
+       ActiveCallForm(FormType formType);
+       virtual ~ActiveCallForm(void);
+       //From BaseForm
+       virtual void Initialize(void);
+
+public:
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+       virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
+
+       virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs);
+       virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId);
+
+       virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
+
+       // Handle the changes(e.g. participant ended) in conference call
+       void HandleConfCallChanged(void);
+       // Used to update multiple call screen
+       void UpdateMultipleCallScreen(Tizen::Base::Collection::IListT<CallInfo>& activeCallsList);
+
+       //From IOrientationEventListener
+       virtual void OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus);
+
+private:
+       // Create the call buttons panel and add to form
+       result InitializeCallButtonsPanel(void);
+       // Set the correct bitmaps and action listeners for swap button
+       void InitializeSwapButton(void);
+       // Set the action listener for manage conf call button
+       void InitializeManageConfCallButton(void);
+       // Set the correct bitmaps and action listeners for hold button
+       void InitializeHoldButton(void);
+       // Set the state of the hold button according to call state
+       void SetHoldButtonStatus(bool toHoldCall);
+       // This function is used to fetch person details using phone number.
+       void ShowPersonDetails(const Tizen::Base::String& phoneNumber, const Tizen::Base::String& contactLblName, const Tizen::Base::String& nameLblName, bool isSecondCaller, CallInfo* pCallInfo);
+       // Method to show phone number on screen for all calls except conference call.
+       void ShowPhoneNumber(const Tizen::Base::String& phoneNumber, const Tizen::Base::String& contactLblName);
+       // Method to show caller name for all calls.
+       void ShowCallerName(const Tizen::Base::String& callerName, const Tizen::Base::String& nameLblName);
+       // This function draws the caller's photo onto screen.
+       void ShowCallerPhoto(Tizen::Graphics::Bitmap* pPhotoId, bool isSecondCaller);
+       //This function is used to show small Thumbnail size photo of caller.
+       void ShowCallersPhotoThumbnail(const Tizen::Graphics::Bitmap& pPhotoId);
+       // Method to show call duration/state(held) for call in progress
+       void ShowTimerInfo(const Tizen::Base::String& timerLblName, bool isOnHold, long long startTime = 0);
+       // Method to set the show state of all the labels when DTMF keypad is launched
+       void SetShowStateOnKeypad(bool showState);
+       // Method to populate the list shown on "More" option
+       void CreateMoreOptionsMenuList(void);
+       // Method to destroy the list shown on "More" option
+       void DestroyMoreOptionsMenuList(void);
+       //Used to Show DTMF keypad
+       void ShowDTMFKeypad(void);
+       //Used to hide DTMF Keypad
+       void HideDTMFKeypad(void);
+       //Used to show text in text field
+       void SetTextToDTMFTextField(const Tizen::Base::String& dtmfStr);
+
+       //From IListViewItemEventListener
+       virtual void OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state);
+       virtual void OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status);
+       virtual void OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction);
+       virtual void OnListViewItemLongPressed(Tizen::Ui::Controls::ListView& listView, int index, int elementId, bool& invokeListViewItemCallback);
+
+       //From IListViewItemProvider
+       virtual Tizen::Ui::Controls::ListItemBase* CreateItem(int index, int itemWidth);
+       virtual bool DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth);
+       virtual int GetItemCount(void);
+       //Method to show thumbnail image
+       void ShowThumbnailImage(const Tizen::Graphics::Bitmap* pPhotoId,Tizen::Base::String& photoLabel);
+
+private:
+       //Start time for Active call
+       long long __activeCallStartTime;
+       //Timer used to show call time
+       Tizen::Base::Runtime::Timer* __pActiveCallTimer;
+       //Custom Buttons Panel
+       CallButtonsPanel* __pCallButtonsPanel;
+       DtmfKeyPadPanel* __pDTMFKeypad;
+       //Option Menu List for conference call
+       Tizen::Ui::Controls::ListView* __pMoreOptionsList;
+       Tizen::Ui::Controls::Label* __pMoreOptionsListAnchor;
+       Tizen::Ui::Controls::Label* __pSmallPhotoLabel;
+       CallInfo* __pActiveCallInfo;
+       CallInfo* __pHeldCallInfo;
+};
+
+#endif  //_PHN_ACTIVE_CALL_FORM_H_
diff --git a/inc/CallApp.h b/inc/CallApp.h
new file mode 100644 (file)
index 0000000..7be1215
--- /dev/null
@@ -0,0 +1,91 @@
+#ifndef _CALLAPP_H_
+#define _CALLAPP_H_
+
+#include <FApp.h>
+#include <FBase.h>
+#include <FSystem.h>
+#include <FUi.h>
+
+class IAppStateChangeListener;
+
+/**
+ * [CallAppApp] UiApp must inherit from UiApp class
+ * which provides basic features necessary to define an UiApp.
+ */
+class CallApp
+       : public Tizen::App::UiApp
+       , public Tizen::System::IScreenEventListener
+       , public Tizen::App::IAppControlProviderEventListener
+{
+public:
+       /**
+        * [Test] UiApp must have a factory method that creates an instance of itself.
+        */
+       static Tizen::App::UiApp* CreateInstance(void);
+
+public:
+       CallApp(void);
+       virtual~CallApp(void);
+
+public:
+       // Called when the UiApp is initializing.
+       virtual bool OnAppInitializing(Tizen::App::AppRegistry& appRegistry);
+
+       // Called when the UiApp initializing is finished. 
+       virtual bool OnAppInitialized(void); 
+
+       // Called when the UiApp is requested to terminate. 
+       virtual bool OnAppWillTerminate(void); 
+
+       // Called when the UiApp is terminating.
+       virtual bool OnAppTerminating(Tizen::App::AppRegistry& appRegistry, bool forcedTermination = false);
+
+       // Called when the UiApp's frame moves to the top of the screen.
+       virtual void OnForeground(void);
+
+       // Called when this UiApp's frame is moved from top of the screen to the background.
+       virtual void OnBackground(void);
+
+       // Called when the system memory is not sufficient to run the UiApp any further.
+       virtual void OnLowMemory(void);
+
+       // Called when the battery level changes.
+       virtual void OnBatteryLevelChanged(Tizen::System::BatteryLevel batteryLevel);
+
+       // Called when the screen turns on.
+       virtual void OnScreenOn(void);
+
+       // Called when the screen turns off.
+       virtual void OnScreenOff(void);
+
+       virtual Tizen::Ui::Scenes::SceneId GetInitialScene(void);
+
+       //Used to get launch arguments at application launch
+       Tizen::Base::Collection::IList* GetAppLaunchArguments(void);
+
+       void AddAppStateChangeListener(const IAppStateChangeListener& listener);
+
+       void RemoveAppStateChangeListener(const IAppStateChangeListener& listener);
+
+       // Called when the application control request is received from the caller application.
+       virtual void OnAppControlRequestReceived(RequestId reqId, const Tizen::Base::String& operationId, const Tizen::Base::String* pUriData, const Tizen::Base::String* pMimeType, const Tizen::Base::Collection::IMap* pExtraData);
+
+private:
+       //internal function to process AppControl request.
+       void ProcessAppControlRequest(RequestId reqId, const Tizen::Base::String& operationId,const Tizen::Base::Collection::IMap* pArgsMap);
+       //internal function to handle AppControl Request for Incoming call.
+       void HandleIncomingCallAppControlRequest(RequestId reqId,const Tizen::Base::Collection::IMap* pArgsMap);
+       //internal function to handle AppControl Request for dial call.
+       void HandleDialCallAppControlRequest(RequestId reqId,const Tizen::Base::Collection::IMap* pArgsMap);
+       //Checks if the number is valid
+       bool CheckNumberIsValid(Tizen::Base::String phoneNumber);
+
+
+
+private:
+       Tizen::Ui::Scenes::SceneId __initialSceneId;
+       Tizen::Base::Collection::ArrayList* __pLaunchArgs;
+       Tizen::Base::Collection::ArrayList __listenerList;
+};
+
+#endif // _CALLAPP_H_
diff --git a/inc/CallAppFormFactory.h b/inc/CallAppFormFactory.h
new file mode 100644 (file)
index 0000000..005c5a3
--- /dev/null
@@ -0,0 +1,17 @@
+#ifndef _CALLAPP_FORM_FACTORY_H_
+#define _CALLAPP_FORM_FACTORY_H_
+
+#include <FUi.h>
+
+
+class CallAppFormFactory
+       : public Tizen::Ui::Scenes::IFormFactory
+{
+public:
+       CallAppFormFactory(void);
+       virtual ~CallAppFormFactory(void);
+
+       virtual Tizen::Ui::Controls::Form* CreateFormN(const Tizen::Base::String& formId, const Tizen::Ui::Scenes::SceneId& sceneId);
+};
+
+#endif // _CALLAPP_FORM_FACTORY_H_
diff --git a/inc/CallAppFrame.h b/inc/CallAppFrame.h
new file mode 100644 (file)
index 0000000..7c16639
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef _CALLAPP_FRAME_H_
+#define _CALLAPP_FRAME_H_
+
+#include <FBase.h>
+#include <FUi.h>
+
+
+class CallAppFrame
+       : public Tizen::Ui::Controls::Frame
+{
+public:
+       CallAppFrame(void);
+       virtual ~CallAppFrame(void);
+
+public:
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+};
+
+#endif //_CALLAPP_FRAME_H_
diff --git a/inc/CallAppMainForm.h b/inc/CallAppMainForm.h
new file mode 100644 (file)
index 0000000..b31ddd5
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef _CALLAPP_MAIN_FORM_H_
+#define _CALLAPP_MAIN_FORM_H_
+
+#include <FBase.h>
+#include <FUi.h>
+
+
+class CallAppMainForm
+       : public Tizen::Ui::Controls::Form
+       , public Tizen::Ui::IActionEventListener
+       , public Tizen::Ui::Controls::IFormBackEventListener
+       , public Tizen::Ui::Scenes::ISceneEventListener
+{
+public:
+       CallAppMainForm(void);
+       virtual ~CallAppMainForm(void);
+       bool Initialize(void);
+
+public:
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+       virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
+       virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source);
+       virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId,
+                                                                  const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs);
+       virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId,
+                                                                       const Tizen::Ui::Scenes::SceneId& nextSceneId);
+
+protected:
+       static const int ID_BUTTON_OK = 101;
+};
+
+#endif //_CALLAPP_MAIN_FORM_H_
diff --git a/inc/CallAppUtility.h b/inc/CallAppUtility.h
new file mode 100644 (file)
index 0000000..f746bde
--- /dev/null
@@ -0,0 +1,67 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               PhnAppUtility.h
+ * @brief              This is the header file for the %AppUtility class.
+ *
+ * This header file contains the declarations for %AppUtility class.
+ */
+#ifndef _PHN_APP_UTILITY_H_
+#define _PHN_APP_UTILITY_H_
+
+#include <FBase.h>
+#include <FMedia.h>
+
+enum KeypadTextPosition
+{
+       POSITION_LEFT,
+       POSITION_RIGHT,
+       POSITION_CENTER,
+       POSITION_TOP_LEFT,
+       POSITION_TOP_CENTER,
+       POSITION_BOTTOM_LEFT,
+       POSITION_BOTTOM_CENTER
+};
+
+/**
+ * @class AppUtility
+ * @brief This class provides common functionalities across application through static member functions.
+ * Its instance cannot needed.
+ *
+ */
+class AppUtility
+{
+private:
+       AppUtility(void);
+       AppUtility(const AppUtility& obj);
+       virtual ~AppUtility(void);
+
+public:
+       /**
+        * Fetches the String from resources based on
+        * resource id provided by "stringId".
+        */
+       static Tizen::Base::String GetResourceString(const Tizen::Base::String& stringId);
+
+       /**
+        * Fetches the Bitmap from resources and
+        * scales it to specified width and height, if provided.
+        */
+       static Tizen::Graphics::Bitmap* GetBitmapFromResourcesN(const Tizen::Base::String& imagePath, int imgWidth = 0, int imgHeight = 0);
+};
+
+#endif // _PHN_APP_UTILITY_H_
diff --git a/inc/CallBaseForm.h b/inc/CallBaseForm.h
new file mode 100644 (file)
index 0000000..b1f1fef
--- /dev/null
@@ -0,0 +1,90 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallBaseForm.h
+ * @brief              This is the header file for the %BaseForm class.
+ *
+ * This header file contains the declarations for %BaseForm class.
+ */
+#ifndef _PHN_BASE_FORM_H_
+#define _PHN_BASE_FORM_H_
+
+#include <FBase.h>
+#include <FSystem.h>
+#include <FGraphics.h>
+#include <FUi.h>
+#include "CallITelephonyEventListener.h"
+#include "CallErrorMsgPopup.h"
+
+class CallInfo;
+class CallPresentationModel;
+
+enum FormType
+{
+       FORMTYPE_OUTGOINGCALL,
+       FORMTYPE_EMERGENCYOUTGOINGCALL,
+       FORMTYPE_INCOMINGCALL,
+       FORMTYPE_ACTIVECALL,
+       FORMTYPE_EMERGENCYACTIVECALL,
+       FORMTYPE_ACTIVECONFCALL,
+       FORMTYPE_CONFCALLLIST,
+       FORMTYPE_ENDCALL,
+       FORMTYPE_MULTIPLECALLS,
+};
+
+/**
+ * @class BaseForm
+ * @brief This class presents a form based UI all call scenarios and provides
+ * common functionalities in all call forms.
+ *
+ */
+class BaseForm
+       : public Tizen::Ui::Controls::Form
+       , public Tizen::Ui::IActionEventListener
+       , public ITelephonyEventListener
+       , public IPopupClosedEventListener
+{
+public:
+       BaseForm(FormType formType);
+       virtual ~BaseForm(void);
+       virtual void Initialize(void) = 0;
+
+public:
+       //Used to add user specific code after controls are added to form
+       virtual result OnInitializing(void);
+
+       //From 'Tizen::Ui::IActionEventListener'
+       virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
+       //Event Listener methods from ITelephonyEventListener
+       virtual void HandleCallConnected(Tizen::Base::Collection::IListT<CallInfo>& pCallList);
+       virtual void HandleCallDisconnected(bool isLastCall, Tizen::Base::Collection::IListT<CallInfo>& pCallList);
+       virtual void HandleConferenceCall(CallInfo& pCallInfo);
+       virtual void HandleIncomingCall(CallInfo& pCallInfo);
+       virtual void HandleCallSwapOccured(Tizen::Base::Collection::IListT<CallInfo>& pCallList);
+       virtual void HandleConferenceChange(void);
+       virtual void HandleTelephonyError(int errorCode);
+       //Event Listener method from IPopupClosedEventListener
+       virtual void HandlePopupClosed(void);
+
+protected:
+       FormType __formType;
+       //Ownership
+       ErrorMsgPopup* __pErrorMsgPopup;
+       CallPresentationModel* __pCallPresentor;
+};
+
+#endif // _PHN_BASE_FORM_H_
diff --git a/inc/CallButtonsPanel.h b/inc/CallButtonsPanel.h
new file mode 100644 (file)
index 0000000..96ed0e5
--- /dev/null
@@ -0,0 +1,115 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallButtonsPanel.h
+ * @brief              This is the header file for the %CallButtonsPanel class.
+ *
+ * This header file contains the declarations for %CallButtonsPanel class.
+ */
+#ifndef _PHN_CALL_BUTTONS_PANEL_H_
+#define _PHN_CALL_BUTTONS_PANEL_H_
+
+#include <FApp.h>
+#include <FBase.h>
+#include <FUi.h>
+#include "CallBaseForm.h"
+#include "CallTypes.h"
+
+/**
+ * @class CallButtonsPanel
+ * @brief This class presents a panel based UI for keypads used in active call
+ * and end call scenarios.
+ *
+ */
+class CallButtonsPanel
+       : public Tizen::Ui::Controls::Panel
+{
+private:
+       enum ButtonState
+       {
+               BTN_NORMAL,
+               BTN_PRESS,
+               BTN_DIM,
+       };
+
+public:
+       CallButtonsPanel(void);
+       virtual ~CallButtonsPanel(void);
+
+       bool ConstructPanel(Tizen::Ui::IActionEventListener* pEventListener, FormType parentFormType);
+
+       /**
+        * Overrides this method to provide user-specific initialization code after the control is added to a container.
+        * @remarks             OnInitializing() is called when the control is about to be added to a container.
+        * @remarks             To cancel adding this control to the parent, return E_FAILURE in this method.
+        * @see                 OnTerminating()
+       */
+       virtual result OnInitializing(void);
+
+       /**
+        * Overrides this method to provide user-specific termination code.
+        * @return              An error code
+        * @remarks             OnTerminating() is called right before the control is removed successfully from the container.
+        * @remarks             To cancel removing this control from the parent, return E_FAILURE in this method.
+        * @see                 OnInitializing()
+       */
+       virtual result OnTerminating(void);
+       //Called to change state, when keypad is opened or closed.
+       void SetKeypadButtonState(CommandIds cmdId);
+       //used to set or change speaker button state.
+       void SetSpeakerButtonState(CommandIds cmdId);
+       //used to set or change Mute button state.
+       void SetMuteButtonState(CommandIds cmdId);
+       //used to set the button panel state in end call form based on type of call.
+       void SetEndCallPanelState(bool isEnabled);
+       //Used to enable or disable "Add Call" Button
+       void EnableAddCallButton(bool enable);
+       //Used to enable or disable "Join Call" Button
+       void EnableJoinCallButton(bool enable);
+       // Used to set the contact is present or not
+       void SetViewContactButtonStatus(bool isContactPresent);
+
+       //set the buttons in the panel as the top controls. Chk if its needed in RC2
+       void SetButtonPosition(void);
+
+protected:
+       // Construct the panel to be shown in "End Call" form
+       result ConstructEndCallPanel(void);
+       // Construct the panel to be shown in "Active Call" form
+       result ConstructActiveCallPanel(void);
+       // Draws the background for the panel
+       result AddBackgroundBitmap(void);
+       // Draws the bitmap at the correct position on the button
+       void SetBitmapsToButton(const Tizen::Base::String& buttonId, const Tizen::Base::String& buttonName, const Tizen::Base::String& imgPath, ButtonState state);
+       // Draws the text at the correct position on the button
+       void SetEnrichedTextToButton(const Tizen::Base::String& buttonName, Tizen::Graphics::Canvas* pCanvas, ButtonState state, int verticalPos);
+       // Adds the action listener for the buttons
+       void AddKeyPadActionListener(const Tizen::Base::String& buttonId, CommandIds cmdId);
+       //Disable the unused buttons for Outgoing / Emergency Forms
+       void DisableKeysForOutgoingCall(void);
+
+
+       //set the View contact bitmaps
+       void SetViewContacBitmapToButton(const Tizen::Base::String& buttonId, const Tizen::Base::String& buttonName, const Tizen::Base::String& imgBackgroundPath,const Tizen::Base::String& imgPath, ButtonState state);
+
+private:
+       //action listener
+       Tizen::Ui::IActionEventListener* __pActionListener;
+       FormType __parentFormType;
+};
+
+#endif /* _PHN_CALL_BUTTONS_PANEL_H_ */
diff --git a/inc/CallCommonUtils.h b/inc/CallCommonUtils.h
new file mode 100644 (file)
index 0000000..dfd3f5c
--- /dev/null
@@ -0,0 +1,148 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ *  @file   CallCommonUtils.h
+ *  @brief     This is the header file for the %DialUtil class.
+ *
+ *  This header file contains the declarations for commonly used functions.
+ */
+#ifndef _PHN_COMMON_UTILS_H_
+#define _PHN_COMMON_UTILS_H_
+
+#include <FUi.h>
+#include <FBase.h>
+
+enum DialerFontStyle
+{
+       FONT_CALLING_TEXT,
+       FONT_KEYPAD_NUMBER,
+       FONT_KEYPAD_TEXT,
+       FONT_KEYPAD_P,
+       FONT_KEYPAD_PLUS,
+       FONT_KEYPAD_CANCEL,
+       FONT_SUGGESTION_NAME,
+       FONT_SUGGESTION_MOBILE,
+       FONT_SUGGESTION_NUMBER,
+       FONT_SUGGESTION_LIST_NUMBER,
+       FONT_HIGHLIGHT_SEARCH_KEYWORD
+};
+
+//Command Ids used in Dialer tab. Always append new command ids at bottom.
+enum DialCommandIds
+{
+       NUM_KEY1 = 1,
+       NUM_KEY2,
+       NUM_KEY3,
+       NUM_KEY4,
+       NUM_KEY5,
+       NUM_KEY6,
+       NUM_KEY7,
+       NUM_KEY8,
+       NUM_KEY9,
+       PAUSE_KEY,
+       NUM_KEY0,
+       HASH_KEY,
+       VIDEOCALL_KEY,
+       CALL_KEY,
+       CLEAR_KEY,
+       CANCEL_KEY,
+       DIAL_CMD_TOTAL_COUNT,
+};
+
+enum LogContextActionIds
+{
+       IDA_LIST_ELEMENT_CALL = 105,
+       IDA_LIST_ELEMENT_VIDEO_CALL,
+       IDA_LIST_ELEMENT_MESSAGE,
+       IDA_LIST_ELEMENT_DELETE,
+
+};
+
+
+extern const int ID_NAME_STRING;
+extern const int ID_NUMBER_STRING;
+extern const int ID_TIME_STRING;
+extern const int ID_CONTACT_BITMAP;
+extern const int ID_CALLTYPE_BITMAP;
+
+
+extern const int X_TEXT_LINE1_ITEM;
+extern const int Y_TEXT_LINE1_ITEM;
+extern const int H_TEXT_LINE1_ITEM;
+extern const int W_TEXT_LINE1_ITEM;
+
+extern const int X_TEXT_LINE2_ITEM;
+extern const int Y_TEXT_LINE2_ITEM;
+extern const int H_TEXT_LINE2_ITEM;
+extern const int W_TEXT_LINE2_ITEM;
+
+extern const int X_TEXT_TIME_ITEM;
+extern const int Y_TEXT_TIME_ITEM;
+extern const int H_TEXT_TIME_ITEM;
+extern const int W_TEXT_TIME_ITEM;
+
+extern const int X_CONTACT_BITMAP_ITEM;
+extern const int Y_CONTACT_BITMAP_ITEM;
+extern const int H_CONTACT_BITMAP_ITEM;
+extern const int W_CONTACT_BITMAP_ITEM;
+
+extern const int X_CALLTYPE_BITMAP_ITEM;
+extern const int Y_CALLTYPE_BITMAP_ITEM;
+extern const int H_CALLTYPE_BITMAP_ITEM;
+extern const int W_CALLTYPE_BITMAP_ITEM;
+
+extern const int X_DIALER_BTN_TXT;
+extern const int W_DIALER_BTN_NUM_TXT;
+extern const int W_DIALER_BTN_ALPHA_TXT;
+
+/**
+ * @class DialUtil
+ * @brief This class provides static public utility functions to dialer module.
+ *
+ */
+class DialUtil
+{
+private:
+       DialUtil(void){};
+       DialUtil(const DialUtil& obj){};
+       virtual ~DialUtil(void){};
+
+public:
+       //used to get text font for button in dialer tab.
+       static Tizen::Graphics::Font* GetTextFontN(int textFontStyle);
+       //used to get text color for button in dialer tab.
+       static Tizen::Graphics::Color* GetTextColorN(int textColor, int buttonStatus);
+       //Function to check if keyword is numeric. This function assumes that a string starting with digit will be numeric.
+       //If needed, it might be implemented in  more generic way to check all characters for digits.
+       static bool IsNumericString(Tizen::Base::String& keyWord);
+       //Sets the 'bgImg' image to 'pCanvas' Canvas, if image is a 9-patch image.
+       static void Draw9PatchToCanvas(Tizen::Graphics::Canvas& pCanvas, const Tizen::Base::String& bgImg);
+       //Used to set image to canvas.
+       static void DrawImageToCanvas(const Tizen::Base::String& image, Tizen::Graphics::Dimension imageDimention, Tizen::Graphics::Canvas& pCanvas, int pos);
+       //Used to convert text to Enriched text and set it to canvas.
+       static void DrawTextToCanvas(const Tizen::Base::String& buttonText1, int fontSize, Tizen::Graphics::Canvas& pCanvas, int pos, int buttonStatus);
+       //Used to set nnormal, pressed image to button.
+       static void DrawCanvasToButton(Tizen::Graphics::Canvas* pCanvasNormal, Tizen::Graphics::Canvas* pCanvasPressed, Tizen::Ui::Controls::Button* pButton);
+       //Used to convert provided digit to its equivalent String instance.
+       static Tizen::Base::String ConvertDialedNumberToString(int dialNumber);
+       //Function used to fetch a list of possible names mapped to 'nextCharPos'.
+       static Tizen::Base::Collection::IList* FetchPossibleNamesListN(const Tizen::Base::String& prevSearchStr, int nextCharPos);
+       //Function used to convert substring of 'name' to keys typed, eg. Ani -> 264
+       static void ConvertNameToNumericKeys(Tizen::Base::String& subContactName, Tizen::Base::String& possibleKeysTyped);
+};
+
+#endif /* _PHN_COMMON_UTILS_H_ */
diff --git a/inc/CallConfCallerListForm.h b/inc/CallConfCallerListForm.h
new file mode 100644 (file)
index 0000000..2db1439
--- /dev/null
@@ -0,0 +1,104 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallConfCallerListForm.h
+ * @brief              This is the header file for the %ConfCallerListForm class.
+ *
+ * This header file contains the declarations for %ConfCallerListForm class.
+ */
+#ifndef _PHN_CONF_CALLER_LIST_FORM_H_
+#define _PHN_CONF_CALLER_LIST_FORM_H_
+
+#include <FBase.h>
+#include <FApp.h>
+#include <FUi.h>
+#include "CallBaseForm.h"
+#include "CallTypes.h"
+
+class CallInfo;
+
+/**
+ * @class ConfCallerListForm
+ * @brief This class presents a form based UI for participants list of conference call.
+ *
+ */
+class ConfCallerListForm
+       : public BaseForm
+       , public Tizen::Ui::Scenes::ISceneEventListener
+       , public Tizen::Base::Runtime::ITimerEventListener
+       , public Tizen::Ui::Controls::IFormBackEventListener
+       , public Tizen::Ui::Controls::ITableViewItemProvider
+       , public Tizen::Ui::IOrientationEventListener
+{
+public:
+       ConfCallerListForm(void);
+       virtual ~ConfCallerListForm(void);
+       //From BaseForm
+       virtual void Initialize(void);
+
+public:
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+       virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
+       virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs);
+       virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId);
+       //From IOrientationEventListener
+       virtual void OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus);
+
+       //Disable all the elements
+       void DisableAllControls(void);
+       //
+       // From 'Container'.
+       // Called when the container needs to draw itself. @n
+       // Users can override this method to display user-specific drawings. @n
+       // This method is called after the container has drawn itself, but just before the container draws its child controls.
+       //
+       virtual result OnDraw(void);
+       // Handle change in conf call list
+       void HandleParticipantsChanged(void);
+
+       virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
+       virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source);
+       //ITableViewItemProvider
+       virtual int GetItemCount(void);
+       virtual Tizen::Ui::Controls::TableViewItem* CreateItem(int itemIndex, int itemWidth);
+       virtual bool DeleteItem(int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem);
+       virtual void UpdateItem(int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem);
+       virtual int GetDefaultItemHeight(void);
+
+private:
+       // Add the action listener for the buttons
+       void AddActionListener(const Tizen::Base::String& keyName, CommandIds cmdId);
+       // Activate the panels to be shown according to the number of calls
+       void ActivatePanels(void);
+       // Activate each individual element in the panel
+       void ActivatePanelAndAddActionListener(const Tizen::Base::String& panelName, const Tizen::Base::String& lineLabelName, const Tizen::Base::String& splitButtonName, const Tizen::Base::String& endButtonName, const Tizen::Base::String& callerLabelName, SplitConfCallerCmdIds splitCmdId, EndConfCallerCmdIds EndCmdId, const Tizen::Base::String& displayName);
+       // Method to show call duration/state(held) for call in progress
+       void ShowTimerInfo(const Tizen::Base::String& timerLblName, long long startTime = 0);
+       // Method to set "Hold" Button status
+       void SetHoldButtonStatus(bool isCallOnHold);
+       void CreateItemAndAddActionListener(  Tizen::Ui::Controls::Button& splitButton, Tizen::Ui::Controls::Button& endButton,  Tizen::Ui::Controls::Label& callerLabel, SplitConfCallerCmdIds splitCmdId,EndConfCallerCmdIds EndCmdId, const Tizen::Base::String& displayName);
+       void CreateTableView(void);
+
+private:
+       CallInfo* __pConfCallInfo;
+       //Timer used to show call time
+       Tizen::Base::Runtime::Timer* __pConfCallTimer;
+       Tizen::Ui::Controls::TableView* __pList;
+};
+
+#endif  //_PHN_CONF_CALLER_LIST_FORM_H_
diff --git a/inc/CallCustomItemBgElement.h b/inc/CallCustomItemBgElement.h
new file mode 100644 (file)
index 0000000..84ca276
--- /dev/null
@@ -0,0 +1,45 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallCustomItemBgElement.h
+ * @brief              This is the header file for the %CustomItemBgElement class.
+ *
+ * This header file contains the declarations for %CustomItemBgElement class.
+ */
+#ifndef _PHN_CUSTOM_ITEM_BG_ELEMENT_H_
+#define _PHN_CUSTOM_ITEM_BG_ELEMENT_H_
+
+#include <FApp.h>
+#include <FUi.h>
+
+/**
+ * @class CustomItemBgElement
+ * @brief This class presents a custom drawing for list item in settings forms.
+ *
+ */
+class CustomItemBgElement
+       : public Tizen::Ui::Controls::ICustomElement
+{
+public:
+       CustomItemBgElement(void);
+       virtual ~CustomItemBgElement(void);
+
+       //From ICustomElement
+       virtual bool OnDraw(Tizen::Graphics::Canvas& canvas, const Tizen::Graphics::Rectangle& rect, Tizen::Ui::Controls::ListItemDrawingStatus status);
+};
+
+#endif // _PHN_CUSTOM_ITEM_BG_ELEMENT_H_
diff --git a/inc/CallDtmfKeypadPanel.h b/inc/CallDtmfKeypadPanel.h
new file mode 100644 (file)
index 0000000..27c2981
--- /dev/null
@@ -0,0 +1,80 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallDtmfKeypadPanel.h
+ * @brief              This is the header file for the %DtmfKeyPadPanel class.
+ *
+ * This header file contains the declarations for %DtmfKeyPadPanel class.
+ */
+#ifndef _PHN_DTMF_KEYPAD_PANEL_H_
+#define _PHN_DTMF_KEYPAD_PANEL_H_
+
+#include <FBase.h>
+#include <FUi.h>
+
+/**
+ * @class DtmfKeyPadPanel
+ * @brief This class presents a panel based UI for DTMF keypad
+ * shown while active call scenarios.
+ *
+ */
+class DtmfKeyPadPanel
+       : public Tizen::Ui::Controls::Panel
+{
+public:
+       DtmfKeyPadPanel(void);
+       virtual ~DtmfKeyPadPanel(void);
+       bool Initialize(Tizen::Ui::IActionEventListener* pEventListener,Tizen::Graphics::Rectangle& boundsRect);
+
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+
+protected:
+
+       enum DialerFontStyle
+       {
+               FONT_CALLING_TEXT,
+               FONT_KEYPAD_NUMBER,
+               FONT_KEYPAD_TEXT,
+               FONT_KEYPAD_P,
+               FONT_KEYPAD_PLUS,
+               FONT_KEYPAD_CANCEL
+       };
+       //Add action listener.
+       void AddListenersToButtons();
+       result SetBackgroundtoButton();
+       // Draws the bitmap at the correct position on the buttons
+       void SetBitmapsToButton(Tizen::Base::String& buttonId,const Tizen::Base::String& buttonText,int actionID);
+       //Sets the background bitmap to button canvas in Pressed state.
+       result SetPressedBgToCanvas(Tizen::Graphics::Canvas& pCanvas, const Tizen::Base::String& bgImg);
+       // Draws the image at the correct position on the button
+       void DrawImageToCanvas(const Tizen::Base::String& image, Tizen::Graphics::Dimension imageDimention, Tizen::Graphics::Canvas& pCanvas, int pos);
+       // Draws the text at the correct position on the button
+       void DrawTextToCanvas(const Tizen::Base::String& buttonText1, int fontSize, Tizen::Graphics::Canvas& pCanvas, int pos, int buttonStatus);
+       // retrieves the position for the text/image in the button
+       void GetPositionToDraw(Object* item, Tizen::Graphics::Canvas* pCanvas, int itemType, int pos, Tizen::Graphics::Point* itemPos);
+       // Gets the font based on the style
+       Tizen::Graphics::Font* GetTextFontN(int textFontStyle);
+       // Get the color to be set for the text
+       Tizen::Graphics::Color* GetTextColorN(int textColor, int buttonStatus);
+
+private:
+       //action listener
+       Tizen::Ui::IActionEventListener* __pActionListener;
+};
+
+#endif // _PHN_DTMF_KEYPAD_PANEL_H_
diff --git a/inc/CallEndCallForm.h b/inc/CallEndCallForm.h
new file mode 100644 (file)
index 0000000..c56ff1e
--- /dev/null
@@ -0,0 +1,126 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallEndCallForm.h
+ * @brief              This is the header file for the %EndCallForm class.
+ *
+ * This header file contains the declarations for %EndCallForm class.
+ */
+#ifndef _PHN_END_CALL_FORM_H_
+#define _PHN_END_CALL_FORM_H_
+
+#include <FBase.h>
+#include <FApp.h>
+#include <FUi.h>
+#include "CallBaseForm.h"
+#include "CallTypes.h"
+#include "CallIAppStateChangeListner.h"
+
+class CallButtonsPanel;
+
+/**
+ * @class EndCallForm
+ * @brief This class presents a form based UI for end call scenarios.
+ *
+ */
+class EndCallForm
+       : public BaseForm
+       , public Tizen::Ui::Scenes::ISceneEventListener
+       , public Tizen::Base::Runtime::ITimerEventListener
+       , public Tizen::App::IAppControlResponseListener
+       , public IAppStateChangeListener
+       , public Tizen::Ui::IOrientationEventListener
+{
+public:
+       EndCallForm(void);
+       virtual ~EndCallForm(void);
+       //From BaseForm
+       virtual void Initialize(void);
+
+public:
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+       virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
+
+       virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs);
+       virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId);
+
+       /**
+        * Called when the container needs to draw itself. @n
+        * Users can override this method to display user-specific drawings. @n
+        * This method is called after the container has drawn itself, but just before the container draws its child controls.
+        */
+       virtual result OnDraw(void);
+
+       virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
+
+       /**
+        * Called when the application control is completed.
+        * @param[in]   providerId      The provider ID
+        * @param[in]   operationId             The operation ID used in application control invocation
+        * @param[in]   pResultList             The list of callback strings of application control
+        * @remarks     The specified @c pResultList provides the result code for the first array element.
+        * @remarks     When the invoked application control is terminated without sending a result,
+        *           then this method is invoked with @c pResultList and it contains App::APPCONTROL_RESULT_TERMINATED.
+        * @remarks     Switching forms using Tizen::Ui::Controls::Frame::SetCurrentForm() in this listener disables the upcoming form
+        *           (UiApp::OnForeground()). If UiApp::OnForeground() is being used in the application logic,
+        *                      it is recommended to avoid switching forms in this listener.
+        * @see         Tizen::App::AppControl
+        */
+       virtual void OnAppControlCompleteResponseReceived(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId, Tizen::App::AppCtrlResult appControlResult, const Tizen::Base::Collection::IMap* pExtraData);
+       //Used to set the contact button state in the end call form
+       void SetContactButtonState(bool showState);
+       //To check if contact is present in Address bool
+       bool IsContactPresent(void);
+       //Called when App comes to foreground
+       virtual void OnForeground(void);
+       //Called when App goes to background
+       virtual void OnBackground(void);
+       //From IOrientationEventListener
+       virtual void OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus);
+
+private:
+       //initialise the end call panel
+       void InitializeCallButtonsPanel(void);
+       //Add the action listener for the buttons
+       void AddKeyPadActionListener(const Tizen::Base::String& keyName, CommandIds cmdId);
+       // Method to show phone number on screen for all calls except conference call.
+       void ShowPhoneNumber(const Tizen::Base::String& phoneNumber, const Tizen::Base::String& lblName);
+       // Method to show caller name and photo for all calls.
+       void ShowPersonDetails(const Tizen::Base::String& phoneNumber, const Tizen::Base::String& nameLblName, const Tizen::Base::String& photoLblName, CallInfo* pCallInfo);
+       // Method to show thumbnail
+       void ShowCallersPhotoThumbnail(const Tizen::Graphics::Bitmap& pPhotoId);
+       //private method to handle whether to close App or goto initial scene, after no more active calls are left.
+       void HandleLastCallCompletion(void);
+       //Handle Add to contacts button press
+       void HandleAddToContacts(void);
+       //Method to show thumbnail image
+       void ShowThumbnailImage(const Tizen::Graphics::Bitmap* pPhotoId,const Tizen::Base::String& photoLabel);
+
+private:
+       //Custom Buttons Panel
+       CallButtonsPanel* __pCallButtonsPanel;
+       Tizen::Base::String* __pContactNumber;
+       //Timer used to show End call scene for 3 sec
+       Tizen::Base::Runtime::Timer* __pEndCallEventTimer;
+       Tizen::Ui::Controls::Label* __pSmallPhotoLabel;
+       bool __isMsgAppControlLaunched;
+       bool __isContactAppControlLaunched;
+       bool __isContactPresent;
+};
+
+#endif  // _PHN_END_CALL_FORM_H_
diff --git a/inc/CallErrorMsgPopup.h b/inc/CallErrorMsgPopup.h
new file mode 100644 (file)
index 0000000..2ca1ee7
--- /dev/null
@@ -0,0 +1,78 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallErrorMsgPopup.h
+ * @brief              This is the header file for the %ErrorMsgPopup class.
+ *
+ * This header file contains the declarations for %ErrorMsgPopup class.
+ */
+#ifndef _PHN_ERROR_MSG_POPUP_H_
+#define _PHN_ERROR_MSG_POPUP_H_
+
+#include <FBase.h>
+#include <FUi.h>
+
+/**
+ * @class IPopupClosedEventListener
+ * @brief This interface is used to notify the popup is closed event to Scenes.
+ *
+ */
+class IPopupClosedEventListener
+{
+public:
+       virtual ~IPopupClosedEventListener(void){};
+       // Called when the error message Pop-up is closed.
+       virtual void HandlePopupClosed(void) = 0;
+};
+
+/**
+ * @class ErrorMsgPopup
+ * @brief This class shows message popup in error condition.
+ *
+ */
+class ErrorMsgPopup: public Tizen::Ui::Controls::Popup
+                                       ,public Tizen::Base::Runtime::ITimerEventListener
+{
+public:
+       ErrorMsgPopup(IPopupClosedEventListener* pEventListener);
+       virtual ~ErrorMsgPopup(void);
+       /**
+        * Function is used to show error message popup
+        * based on the error code received.
+        */
+       void ShowErrorMsgPopupN(int errorCode);
+
+       //From ITimerEventListener
+       virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
+
+private:
+       void ConstructPopup(int errorCode);
+       //Function is used to fetch error messages based on error code
+       Tizen::Base::String FetchErrorMessage(int errorCode);
+       //draws and shows the popup on screen
+       void ShowPopup(void);
+
+private:
+       //Timer used to show message
+       Tizen::Base::Runtime::Timer* __pTimer;
+       //Listener to popup closed event.
+       IPopupClosedEventListener* __pEventListener;
+       //used to close the popup
+       int __popupModalResult;
+};
+
+#endif // _PHN_ERROR_MSG_POPUP_H_
diff --git a/inc/CallIAppStateChangeListner.h b/inc/CallIAppStateChangeListner.h
new file mode 100644 (file)
index 0000000..323bfbf
--- /dev/null
@@ -0,0 +1,37 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file       CallIAppStateChangeListner.h
+ * @brief      This is the header file for the ICallIAppStateChangeListner class.
+ */
+
+#ifndef _PHN_STATE_CHANGE_LISTNER_H_
+#define _PHN_STATE_CHANGE_LISTNER_H_
+
+#include <FBase.h>
+
+class IAppStateChangeListener
+       : public Tizen::Base::Object
+{
+public:
+       virtual ~IAppStateChangeListener(void) {}
+
+       virtual void OnForeground(void) = 0;
+       virtual void OnBackground(void) = 0;
+};
+
+#endif /* _PHN_STATE_CHANGE_LISTNER_H_ */
diff --git a/inc/CallICalllogChangeListener.h b/inc/CallICalllogChangeListener.h
new file mode 100644 (file)
index 0000000..b030f60
--- /dev/null
@@ -0,0 +1,39 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+/**
+ * @file               CallICalllogChangeListener.h
+ * @brief              This is the header file for the %ICalllogChangeListener class.
+ *
+ * This header file contains the declarations for %ICalllogChangeListener class.
+ */
+#ifndef _PHN_CALL_LOG_CHANGE_LISTENER_H_
+#define _PHN_CALL_LOG_CHANGE_LISTENER_H_
+
+/**
+ * @class ICalllogChangeListener
+ * @brief This class presents call back function from call log module.
+ *
+ */
+class ICalllogChangeListener
+{
+public:
+       virtual ~ICalllogChangeListener(void){};
+
+       virtual void OnCalllogChanged(void) = 0;
+
+};
+
+#endif //_PHN_CALL_LOG_CHANGE_LISTENER_H_
diff --git a/inc/CallIPopupItemSelectListener.h b/inc/CallIPopupItemSelectListener.h
new file mode 100644 (file)
index 0000000..ea84141
--- /dev/null
@@ -0,0 +1,48 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallIPopupItemSelectListener.h
+ * @brief              This is the header file for the %IPopupItemSelectListener class.
+ *
+ * This header file contains the declarations for %IPopupItemSelectListener class.
+ */
+#ifndef _IPOPUP_ITEM_SELECT_LISTENER_H_
+#define _IPOPUP_ITEM_SELECT_LISTENER_H_
+
+#include <FBaseRtIEventListener.h>
+
+/**
+ * @class IPopupItemSelectListener
+ * @brief Class IPopupItemSelectListener is listener for popup object deletion.
+ *
+ */
+class IPopupItemSelectListener
+       : public Tizen::Base::Runtime::IEventListener
+{
+public:
+       /**
+        * This is the destructor for this class.
+        */
+       virtual ~IPopupItemSelectListener(void) {}
+
+       /**
+        * On Item selected.
+        */
+       virtual void OnItemSelected(int itemIndex) = 0;
+};
+
+#endif // _IPOPUP_ITEM_SELECT_LISTENER_H_
diff --git a/inc/CallISettingsEventListener.h b/inc/CallISettingsEventListener.h
new file mode 100644 (file)
index 0000000..bd0f0cb
--- /dev/null
@@ -0,0 +1,54 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallISettingsEventListener.h
+ * @brief              This is the header file for the %ISettingsEventListener class.
+ *
+ * This header file contains the declarations for %ISettingsEventListener class.
+ */
+#ifndef _PHN_I_SETTINGS_EVENT_LISTENER_H_
+#define _PHN_I_SETTINGS_EVENT_LISTENER_H_
+
+#include "CallSettingsConstants.h"
+
+/**
+ * @class ISettingsEventListener
+ * @brief This interface is used to listen to events from Telephony Manager.
+ *
+ */
+class ISettingsEventListener
+{
+public:
+       virtual ~ISettingsEventListener(void){};
+
+       //Handle the response for getCallWaiting request
+       virtual void HandleGetCallWaitingResponse(bool isCallSuccessful, bool callWaitingActivated) = 0;
+       //Handle the response for setCallWaiting request
+       virtual void HandleSetCallWaitingResponse(bool isCallSuccessful, bool isCallWaitingEnabled) = 0;
+       //Handle the response for getCallForwarding request
+       virtual void HandleGetCallForwardResponse(bool isCallSuccessful, CallForwardCondition callFwdCondition, const Tizen::Base::String& callFwdNumber, bool callForwardActivated, int noReplyWaitTime) = 0;
+       //Handle the response for setCallForwarding request
+       virtual void HandleSetCallForwardResponse(bool isCallSuccessful, CallForwardCondition callFwdCondition, const Tizen::Base::String& callFwdNumber, bool isCallForwardActivated, int noReplyWaitTime) = 0;
+       //Handle the response for setcallBarring request
+       virtual void HandleSetCallBarringResponse(bool isCallSuccessful, CallBarringType callBarringType, bool isBarringActivated) = 0;
+       //Handle the response for getCallBarring request
+       virtual void HandleGetCallBarringResponse(bool isCallSuccessful, CallBarringType callBarringType, bool isBarringActivated) = 0;
+       //Handle flight mode change
+       virtual void HandleFlightMode(bool isFlightModeActivated) = 0;
+};
+
+#endif // _PHN_I_SETTINGS_EVENT_LISTENER_H_
diff --git a/inc/CallITelephonyEventListener.h b/inc/CallITelephonyEventListener.h
new file mode 100644 (file)
index 0000000..bba9708
--- /dev/null
@@ -0,0 +1,90 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallITelephonyEventListener.h
+ * @brief              This is the header file for the %ITelephonyEventListener class.
+ *
+ * This header file contains the declarations for %ITelephonyEventListener class.
+ */
+#ifndef _PHN_I_TELEPHONY_EVENT_LISTENER_H_
+#define _PHN_I_TELEPHONY_EVENT_LISTENER_H_
+
+#include "CallInfo.h"
+
+/**
+ * @class ITelephonyEventListener
+ * @brief This interface is used to listen to events from Telephony Manager.
+ *
+ */
+class ITelephonyEventListener
+{
+public:
+       virtual ~ITelephonyEventListener(void){};
+
+       /**
+        * Called when the dialed call / incoming call is accepted.
+        * Implement this to handle voice call events.
+        * @param[out]          pCallList       -       list of active calls.
+        */
+       virtual void HandleCallConnected(Tizen::Base::Collection::IListT<CallInfo>& pCallList) = 0;
+
+       /**
+        * This function is called when a call is disconnected. It returns the list of active calls, if any is existing.
+        * Otherwise it returns the last ended call along with call duration and cause to show.
+        *
+        * @param[out]          isLastCall      -       true, if this call was last call.
+        * @param[out]          pCallList       -       list of calls - ended Call if last call, otherwise currently active call.
+        */
+       virtual void HandleCallDisconnected(bool isLastCall, Tizen::Base::Collection::IListT<CallInfo>& pCallList) = 0;
+
+       /**
+        * This function is called when two calls are joined and a conference call is setup.
+        *
+        * @param[in]           pCallInfo       -       The conference call information data.
+        */
+       virtual void HandleConferenceCall(CallInfo& pCallInfo) = 0;
+
+       /**
+        * This function is called when incoming call is received.
+        *
+        * @param[in]           pCallInfo       -       The conference call information data.
+        */
+       virtual void HandleIncomingCall(CallInfo& pCallInfo) = 0;
+
+       /**
+        * Called when the dialed call / incoming call is accepted.
+        * Implement this to handle voice call events.
+        * @param[out]          pCallList       -       list of active calls.
+        */
+       virtual void HandleCallSwapOccured(Tizen::Base::Collection::IListT<CallInfo>& pCallList) = 0;
+
+       /**
+        * Called when the conference list changes.
+        * Implement this to handle voice call events.
+        * @param[out]          pCallInfo       -       The conference call information data.
+        */
+       virtual void HandleConferenceChange(void) = 0;
+
+       /**
+        * Telephony event callback sent to listeners to handle
+        * error and show customized error message.
+        * @ param[out]         errorCode - error cause returned by SLP TAPI.
+        */
+       virtual void HandleTelephonyError(int errorCode) = 0;
+};
+
+#endif // _PHN_I_TELEPHONY_EVENT_LISTENER_H_
diff --git a/inc/CallIncomingCallForm.h b/inc/CallIncomingCallForm.h
new file mode 100644 (file)
index 0000000..2206c2f
--- /dev/null
@@ -0,0 +1,160 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallIncomingCallForm.h
+ * @brief              This is the header file for the %IncomingCallForm class.
+ *
+ * This header file contains the declarations for %IncomingCallForm class.
+ */
+#ifndef _PHN_INCOMING_CALL_FORM_H_
+#define _PHN_INCOMING_CALL_FORM_H_
+
+#include <FApp.h>
+#include <FBase.h>
+#include <FUi.h>
+#include "CallBaseForm.h"
+#include "CallTypes.h"
+#include "CallIPopupItemSelectListener.h"
+#include "CallOptionPopup.h"
+
+/**
+ * @class IncomingCallForm
+ * @brief This class presents a form based UI for incoming call scenarios.
+ *
+ */
+class IncomingCallForm
+       : public BaseForm
+       , public Tizen::Ui::Controls::IFormBackEventListener
+       , public Tizen::Ui::Controls::ITableViewItemEventListener
+       , public Tizen::Ui::Controls::ITableViewItemProvider
+       , public Tizen::Ui::Scenes::ISceneEventListener
+       , public Tizen::Ui::ITouchEventListener
+       , public IPopupItemSelectListener
+{
+public:
+       IncomingCallForm(void);
+       virtual ~IncomingCallForm(void);
+       //From BaseForm
+       virtual void Initialize(void);
+
+public:
+       virtual result OnInitializing(void);
+       virtual result OnTerminating(void);
+       virtual void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
+
+       virtual void OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId, const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs);
+       virtual void OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId, const Tizen::Ui::Scenes::SceneId& nextSceneId);
+
+       /**
+        * Called when the container needs to draw itself. @n
+        * Users can override this method to display user-specific drawings. @n
+        * This method is called after the container has drawn itself, but just before the container draws its child controls.
+        */
+       virtual result OnDraw(void);
+
+       // From 'ITableViewItemProvider' - Gets the total number of items in the specified group.
+       virtual int GetItemCount(void);
+       // From 'ITableViewItemProvider' - Creates the specified item.
+       virtual Tizen::Ui::Controls::TableViewItem* CreateItem(int itemIndex, int itemWidth);
+       // From 'ITableViewItemProvider' - Deletes the specified item.
+       virtual bool DeleteItem(int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem);
+       // From 'ITableViewItemProvider' - Updates the specified item.
+       virtual void UpdateItem(int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem){};
+       // From 'ITableViewItemProvider' - Gets the default height of an item.
+       virtual int GetDefaultItemHeight(void);
+       // From 'ITableViewItemEventListener' - Called when the state of a TableViewItem in the TableView is changed.
+       virtual void OnTableViewItemStateChanged(Tizen::Ui::Controls::TableView& tableView, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status){};
+       // From 'ITableViewItemEventListener' - Called when the TableViewContextItem is opened or closed.
+       virtual void OnTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::TableView& tableView, int itemIndex, Tizen::Ui::Controls::TableViewContextItem* pContextItem, bool activated){};
+       // From 'ITableViewItemEventListener' - Called when the item is reordered.
+       virtual void OnTableViewItemReordered(Tizen::Ui::Controls::TableView& tableView, int itemIndexFrom, int itemIndexTo){};
+
+       //From ITouchEventListener
+       virtual void OnTouchPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchReleased(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchMoved(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo);
+       virtual void OnTouchFocusIn(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo){};
+       virtual void OnTouchFocusOut(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo){};
+       virtual void OnTouchCanceled(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo) {};
+       virtual void OnTouchLongPressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo) {};
+       virtual void OnTouchDoublePressed(const Tizen::Ui::Control& source, const Tizen::Graphics::Point& currentPosition, const Tizen::Ui::TouchEventInfo& touchInfo) {};
+       virtual void OnUserEventReceivedN(RequestId requestId, Tizen::Base::Collection::IList* pArgs);
+       virtual void OnFormBackRequested(Tizen::Ui::Controls::Form& source);
+
+       //From IPopupEventListener
+       void OnItemSelected(int itemIndex);
+private:
+       // Method to fetch person details using phone number.
+       void ShowPersonDetails(const Tizen::Base::String& phoneNumber, const Tizen::Base::String& contactLblName, const Tizen::Base::String& nameLblName, CallInfo* pCallInfo);
+       // Method to show caller name for all calls.
+       void SetTextToLabel(const Tizen::Base::String& textToBeSet, const Tizen::Base::String& lblName);
+       // This function draws the caller's photo onto screen.
+       void ShowCallerPhoto(const Tizen::Graphics::Bitmap* pPhotoId);
+       //This function is used to show small Thumbnail size photo of caller.
+       void ShowCallersPhotoThumbnail(const Tizen::Graphics::Bitmap& pPhotoId);
+       // Method to show call duration/state(held) for call in progress
+       void ShowTimerInfo(const Tizen::Base::String& timerLblName, const Tizen::Base::String& textToBeDisplayed);
+       // Method to hide the "Reject with Message" panel
+       void HideRejectPanel(void);
+       // Method to create the Tableview to show the list of messages for the "Reject with Message" panel
+       void InitializeTableView(void);
+       // Method to create the canvas for the "Reject with Message" Button
+       void SetBitmapToRejectMessageButton(const Tizen::Base::String& btnName, const Tizen::Base::String& bgBitmap
+                                                                          , const Tizen::Base::String& arrowBitmap, const Tizen::Base::String& messageIconBitmap, bool isButtonInPanel, bool setButtonPressBitmap);
+       void HandleMultipleCallSelection(int itemIndex);
+       // Method to initialize footer
+       void InitializeFooter(void);
+       // Method to show footer
+       void ShowRejectMessageFooter(void);
+       // Method to hide footer
+       void HideRejectMessageFooter(void);
+       //Method used to show thumbnail image
+       void ShowThumbnailImage(const Tizen::Graphics::Bitmap* pPhotoId);
+
+private:
+       //contact number for incoming call
+       Tizen::Base::String* __pActiveContactNo;
+       //Call Handle for the incoming call
+       int __incomingCallHandle;
+       //List for holding the rejectMessages from settings
+       Tizen::Base::Collection::IListT<Tizen::Base::String>* __pRejectMessageList;
+       bool __isAnswerCallStarted;
+       bool __isRejectCallStarted;
+       Tizen::Base::Collection::ArrayList* __pAcceptArrowLabelsList;
+       Tizen::Base::Collection::ArrayList* __pRejectArrowLabelsList;
+       Tizen::Graphics::Bitmap* __pRejectCircle;
+       Tizen::Graphics::Bitmap* __pAcceptCircle;
+       Tizen::Graphics::Bitmap* __pAcceptDial;
+       Tizen::Graphics::Bitmap* __pRejectDial;
+       Tizen::Graphics::Bitmap* __pAcceptArrow;
+       Tizen::Graphics::Bitmap* __pRejectArrow;
+       Tizen::Ui::Controls::Label* __pAcceptLabel; //for dial
+       Tizen::Ui::Controls::Label* __pRejectLabel;
+       Tizen::Ui::Controls::Label* __pAcceptArrowLabel;
+       Tizen::Ui::Controls::Label* __pRejectArrowLabel;
+       Tizen::Ui::Controls::Panel* __pCallHandlePanel;
+       Tizen::Ui::Animations::VisualElement* __pAcceptVisElem;
+       Tizen::Ui::Animations::VisualElement* __pRejectVisElem;
+       Tizen::Ui::Animations::VisualElement* __pRejectFinalVisElem;
+       Tizen::Ui::Animations::VisualElement* __pAcceptFinalVisElem;
+       Tizen::Ui::Animations::VisualElement* __pAcceptArrowVisElem;
+       Tizen::Ui::Animations::VisualElement* __pRejectArrowVisElem;
+       CallOptionPopup* __pOptionPopup;
+       Tizen::Ui::Controls::Label* __pSmallPhotoLabel;
+};
+
+#endif  // _PHN_INCOMING_CALL_FORM_H_
diff --git a/inc/CallInfo.h b/inc/CallInfo.h
new file mode 100644 (file)
index 0000000..41a0a86
--- /dev/null
@@ -0,0 +1,160 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallInfo.h
+ * @brief              This is the header file for the %CallInfo class.
+ *
+ * This header file contains the declarations for %CallInfo class.
+ */
+#ifndef _PHN_CALL_INFO_H_
+#define _PHN_CALL_INFO_H_
+
+#include <FBase.h>
+#include <FSocial.h>
+#include "CallTypes.h"
+
+/**
+ * @class CallInfo
+ * @brief This class holds information about currently active Single party,
+ * mutli-party or conference calls.
+ *
+ */
+class CallInfo
+       : public Tizen::Base::Object
+{
+public:
+       enum CallType
+       {
+               VOICE_CALL,
+               VIDEO_CALL, // Currently not supported
+       };
+
+public:
+       // Default Constructor.
+       CallInfo(void);
+       virtual ~CallInfo(void);
+
+       //returns if a call is conference call or not
+       bool IsConferenceCall(void);
+       //Sets the conferenceflag for a call
+       void SetConference(bool isConferenceCall);
+       //returns if a call is emergency call or not
+       bool IsEmergency(void);
+       //Sets if a call is emergency call
+       void SetEmergency(bool isEmergency);
+       //get the call Handle
+       Tizen::Base::Long* GetCallHandle(void);
+       //Set the call handle
+       void SetCallHandle(unsigned int handle);
+       //Get for Contact Number for the call
+       Tizen::Base::String& GetContactNumber(void);
+       //Set the contact number for the call
+       void SetContactNumber(Tizen::Base::String& contactNumber);
+       //Sets the contact info for the call
+       void SetContactInfo(const Tizen::Social::Contact& contact);
+       //returns contact info if present in contacts db
+       const Tizen::Social::Contact* GetContactInfo(void);
+       //returns if a call is held call or not
+       bool IsOnHold(void);
+       //Sets the held call for the call
+       void SetOnHold(bool onHold);
+       //get the connected time for the call
+       long long GetCallConnectTime(void);
+       //Sets the connected time when call started
+       void SetCallConnectTime(long long connectTime);
+       //get the notified / dialed time when call started
+       long long GetCallNotificationTime(void);
+       //Sets the notified / dialed time when call started
+       void SetCallNotificationTime(long long callNotificationTime);
+       //gets the end call cause
+       Tizen::Base::String& GetEndCallCause(void);
+       //Sets the end call cause
+       void SetEndCallCause(Tizen::Base::String& pEndCause);
+       //gets the caller list for a conference call
+       Tizen::Base::Collection::IListT<CallInfo>* GetCallerList(void);
+       //Adds a call to conference call list
+       result AddCallToCallerList(CallInfo& callInfo);
+       //removes a call from the conference call list
+       result RemoveCallFromCallerList(int index);
+       //returns the number of calls in conference
+       int GetCallerListCount(void);
+       //sets the type of the call for the logs application
+       void SetCalllogType(CallLogType callLogType);
+       //returns the type of the call log
+       CallLogType GetCalllogType(void);
+       /**
+        * This is the equality operator for this CallInfo.
+        * returns true, if both have same value for call handle.
+        *
+        * @param[in]   rhs     A reference to the %CallInfo instance
+        */
+       bool operator ==(const CallInfo& rhs) const;
+
+       /**
+        * This is the InEquality operator for this CallInfo.
+        * returns true, if value for call handle is different.
+        *
+        * @param[in]   rhs     A reference to the %CallInfo instance
+        */
+       bool operator !=(const CallInfo& rhs) const;
+
+       /**
+        * This is the assignment operator for this class.
+        * @param[in]   rhs     A reference to the %CallInfo instance
+        */
+       CallInfo& operator =(const CallInfo& rhs);
+
+       // this funtion fetches the contact person's name.
+       Tizen::Base::String* FetchCallerNameN(void);
+       // this funtion fetches the contact person's photo id, if present.
+       Tizen::Graphics::Bitmap* FetchCallerPhotoN(void);
+
+private:
+       bool __isConfCall;
+       CallType __callType;
+
+       ///Calllog type information like outgoing, incoming, missed call
+       CallLogType __calllogType;
+
+       //To uniquely identify both Single / Conf. Call.
+       Tizen::Base::Long* __pCallHandle;
+
+       bool __isEmergency;
+
+       //applicable only for Single Call
+       Tizen::Base::String __contactNumber;
+
+       //call is held
+       bool __isOnHold;
+
+       //system time when call connected
+       long long __callConnectTime;
+
+       //system time when the call was notified / dialed
+       long long __callNotificationTime;
+
+       //end call cause
+       Tizen::Base::String* __pEndCallCause;
+
+       //callHandles for individual callers in conf. calls
+       Tizen::Base::Collection::ArrayListT<CallInfo>* __pParticipantCallHandles;
+
+       //used to store previously fetched contact.
+       Tizen::Social::Contact* __pContact;
+};
+
+#endif // _PHN_CALL_INFO_H_
diff --git a/inc/CallOptionPopup.h b/inc/CallOptionPopup.h
new file mode 100644 (file)
index 0000000..88b3a1f
--- /dev/null
@@ -0,0 +1,71 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallCallOptionPopup.h
+ * @brief              This is the header file for the %CallOptionPopup class.
+ *
+ * This header file contains the declarations for %CallOptionPopup class.
+ */
+#ifndef _PHN_CALL_OPTION_POPUP_H_
+#define _PHN_CALL_OPTION_POPUP_H_
+
+#include <FApp.h>
+#include <FUi.h>
+
+#include "CallIPopupItemSelectListener.h"
+#include "CallPresentationModel.h"
+#include "CallTypes.h"
+
+/**
+ * @class CallOptionPopup
+ * @brief This class presents a Popup based UI and functionality for popup
+ * shown for incoming call scenarios.
+ *
+ */
+class CallOptionPopup
+       : public Tizen::Ui::Controls::Popup
+       , public Tizen::Ui::Controls::IListViewItemEventListener
+       , public Tizen::Ui::Controls::IListViewItemProvider
+       , public Tizen::Ui::IActionEventListener
+{
+
+public:
+       CallOptionPopup(IPopupItemSelectListener& listener, CallPresentationModel& callPresenter);
+       virtual ~CallOptionPopup(void);
+       result Initialize(void);
+       // IListViewItemEventListener
+       virtual void OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state){};
+       virtual void OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status);
+       virtual void OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction){};
+       virtual void OnListViewItemLongPressed(Tizen::Ui::Controls::ListView& listView, int index, int elementId, bool& invokeListViewItemCallback){};
+       //IListViewItemProvider
+       virtual Tizen::Ui::Controls::ListItemBase* CreateItem(int index, int itemWidth);
+       virtual bool DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth);
+       virtual int GetItemCount(void);
+       // From IActionEventListener
+       void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
+
+private:
+       result ConstructListData(void);
+
+private:
+       Tizen::Base::Collection::ArrayList* __pOptionsList;
+       IPopupItemSelectListener& __popupListener;
+       CallPresentationModel& __callPresenter;
+};
+
+#endif // _PHN_CALL_OPTION_POPUP_H_
diff --git a/inc/CallPanelFactory.h b/inc/CallPanelFactory.h
new file mode 100644 (file)
index 0000000..62f9b9f
--- /dev/null
@@ -0,0 +1,46 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallPanelFactory.h
+ * @brief              This is the header file for the %PanelFactory class.
+ *
+ * This header file contains the declarations for %PanelFactory class.
+ */
+#ifndef _PHN_PANEL_FACTORY_H_
+#define _PHN_PANEL_FACTORY_H_
+
+#include <FUi.h>
+
+extern const wchar_t* PANEL_DIALER;
+extern const wchar_t* PANEL_LOGS;
+
+/**
+ * @class PanelFactory
+ * @brief This class provides the Panel factory for Dial application
+ *
+ */
+class PanelFactory
+       : public Tizen::Ui::Scenes::IPanelFactory
+{
+public:
+       PanelFactory(void);
+       virtual ~PanelFactory(void);
+
+       virtual Tizen::Ui::Controls::Panel* CreatePanelN(const Tizen::Base::String& panelId, const Tizen::Ui::Scenes::SceneId& sceneId);
+};
+
+#endif // _PHN_PANEL_FACTORY_H_
diff --git a/inc/CallPhoneFormFactory.h b/inc/CallPhoneFormFactory.h
new file mode 100644 (file)
index 0000000..d26819c
--- /dev/null
@@ -0,0 +1,85 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallPhoneFormFactory.h
+ * @brief              This is the header file for the %FormFactory class.
+ *
+ * This header file contains the declarations for %FormFactory class.
+ */
+#ifndef _PHN_PHONE_FORM_FACTORY_H_
+#define _PHN_PHONE_FORM_FACTORY_H_
+
+#include <FUi.h>
+#include "CallBaseForm.h"
+
+//Corresponding Call form name
+extern const wchar_t* IDL_FORM_OUTCALL;
+extern const wchar_t* IDL_FORM_OUT_EMERGENCYCALL;
+extern const wchar_t* IDL_FORM_INCOMINGCALL;
+extern const wchar_t* IDL_FORM_ACTIVECALL;
+extern const wchar_t* IDL_FORM_ACTIVE_EMERGENCYCALL;
+extern const wchar_t* IDL_FORM_CONFCALL;
+extern const wchar_t* IDL_FORM_CONFCALLLIST;
+extern const wchar_t* IDL_FORM_ENDCALL;
+extern const wchar_t* IDL_FORM_MULTIPLEACTIVECALL;
+//Corresponding Settings form name
+extern const wchar_t* IDL_FORM_SETTINGS_PREFIX;
+extern const wchar_t* IDL_FORM_MAIN_SETTING_MENU;
+extern const wchar_t* IDL_FORM_CALL_REJECTLIST_MENU;
+extern const wchar_t* IDL_FORM_CALL_REJECTMSGS_MENU;
+extern const wchar_t* IDL_FORM_SPEED_DIAL;
+extern const wchar_t* IDL_FORM_MORE_OPTIONS;
+extern const wchar_t* IDL_FORM_CALL_STATUSTONES;
+extern const wchar_t* IDL_FORM_CALLTYPE_FORWARD;
+extern const wchar_t* IDL_FORM_CALL_FORWARD_OPTIONS;
+extern const wchar_t* IDL_FORM_CALLTYPE_BARRING;
+extern const wchar_t* IDL_FORM_CALL_BARRING_OPTIONS;
+extern const wchar_t* IDL_FORM_CALL_WAITING_OPTIONS;
+extern const wchar_t* IDL_FORM_ADD_REJECT_NUMBER;
+extern const wchar_t* IDL_FORM_AUTO_AREA_CODE;
+extern const wchar_t* IDL_FORM_ADD_REJECT_MSG;
+extern const wchar_t* IDL_FORM_EDIT_REJECT_MSG;
+extern const wchar_t* IDL_FORM_FORWARD_TO_NUMBER;
+extern const wchar_t* IDL_FORM_NOREPLY_FORWARD_TO_NUMBER;
+extern const wchar_t* IDL_FORM_SCENE_SET_BARRING_PWD;
+extern const wchar_t* IDL_FORM_DEL_NUMBER;
+extern const wchar_t* IDL_FORM_DEL_MESSAGE;
+//Dialer & Call Log Form names
+extern const wchar_t* IDL_FORM_DIAL_APP;
+extern const wchar_t* IDL_FORM_CALL_LOG_DETAIL;
+
+/**
+ * @class FormFactory
+ * @brief This class presents a form factory functionality for all forms.
+ *
+ */
+class FormFactory
+       : public Tizen::Ui::Scenes::IFormFactory
+{
+public:
+       FormFactory(void);
+       virtual ~FormFactory(void);
+
+       //Factory Method from IFormFactory
+       virtual Tizen::Ui::Controls::Form* CreateFormN(const Tizen::Base::String& formId, const Tizen::Ui::Scenes::SceneId& sceneId);
+
+private:
+       //Used to create forms related to Voice Call module
+       Tizen::Ui::Controls::Form* CreateVoiceCallForm(const Tizen::Base::String& formId, const Tizen::Ui::Scenes::SceneId& sceneId);
+};
+
+#endif // _PHN_PHONE_FORM_FACTORY_H_
diff --git a/inc/CallPresentationModel.h b/inc/CallPresentationModel.h
new file mode 100644 (file)
index 0000000..ba58582
--- /dev/null
@@ -0,0 +1,158 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               PhnCallPresentationModel.h
+ * @brief              This is the header file for the %CallPresentationModel class.
+ *
+ * This header file contains the declarations for %CallPresentationModel class.
+ */
+#ifndef _PHN_CALL_PRESENTATION_MODEL_H_
+#define _PHN_CALL_PRESENTATION_MODEL_H_
+
+#include <FApp.h>
+#include "CallTypes.h"
+#include "CallITelephonyEventListener.h"
+#include "CalllogManager.h"
+
+class CallInfo;
+class TelephonyManager;
+class SettingsPresentationModel;
+
+/**
+ * @class CallPresentationModel
+ * @brief CallPresentationModel is Singleton class and acts as interface between
+ * events from other managers and all the views.
+ *
+ */
+class CallPresentationModel: public ITelephonyEventListener
+               , public Tizen::App::IAppControlResponseListener
+{
+public:
+       //create a singleton instance
+       static CallPresentationModel* GetInstance(void);
+
+private:
+       CallPresentationModel(void);
+       CallPresentationModel(CallPresentationModel& presentor);
+       virtual ~CallPresentationModel(void);
+       CallPresentationModel& operator =(const CallPresentationModel& presentor);
+
+
+       result Construct(void);
+       static void CreateInstance(void);
+       static void DestroyInstance(void);
+
+public:
+       //set the telephony event listener
+       void SetTelEventListener(ITelephonyEventListener* pTelEventListener);
+
+       //Dial an outgoing call
+       void DialCall(Tizen::Base::String& contactNumber, bool isEmergency);
+       //End the call
+       void EndActiveCall(Tizen::Base::Long callHandle);
+       void EndDialingCall(Tizen::Base::String& contactNumber);
+       //End the conference call
+       bool EndConferenceCall(void);
+       //Ends all active calls
+       void EndAllCall(void);
+       /**
+        * Hold the call.
+        * @returns true if successful.
+        */
+       bool HoldCall(Tizen::Base::Long callHandle);
+       /**
+        * Unhold the call.
+        * @returns true if successful.
+        */
+       bool UnHoldCall(Tizen::Base::Long callHandle);
+       //Hold conference call
+       bool HoldConferenceCall(void);
+       //UnHold conference call
+       bool ActivateConferenceCall(void);
+       //Join active and held call to conference call.
+       void JoinCall(void);
+       //Swap between active and held call
+       void SwapCalls(void);
+       //Mute or Unmute Call
+       bool SetMuteStatus(bool setMute);
+       //Get the call Muted status
+       bool IsCallMuted(void);
+       //Set speaker to On or Off mode.
+       bool SetSpeakerStatus(bool setSpeaker);
+       //Get the speaker status
+       bool IsSpeakerOn(void);
+       //Send DTMF strings
+       void SendDTMFSignal(Tizen::Base::String& textToBeSent);
+       //Function to get the conference call info
+       CallInfo* GetConferenceCallInfoN(void);
+       //Split this call from the conference call
+       void SplitFromConference(SplitConfCallerCmdIds splitCallerCmdId, Tizen::Base::Collection::IListT<CallInfo>* pConfCallList);
+       //End this single call from the conference call
+       void EndCallFromConference(EndConfCallerCmdIds endCallerCmdId, Tizen::Base::Collection::IListT<CallInfo>* pConfCallList);
+       //returns true, if split operation is allowed. Else, returns false.
+       bool IsSplitAllowed(void);
+       //Accept the incoming call as per the options
+       void AcceptIncomingCall(CallAnsweringOptions answerOptions,int callHandle);
+       //Reject an incoming call and send message, if required.
+       bool RejectCall(int callHandle, bool sendMsg, const Tizen::Base::String& contactNumber);
+       //Function used to add call
+       void AddCall(const Tizen::Base::String& phoneNumber);
+       //Get the current call count
+       int GetCurrentCallCount(void);
+       //Get the current call list
+       Tizen::Base::Collection::IListT<CallInfo>* GetCallListN(void);
+       //Check if modem and sim initialization is complete.
+       bool CheckSimInitializationIsCompleted();
+       //This function returns true, if contact number is emergency no.
+       bool IsEmergencyNumber(const Tizen::Base::String& phoneNumber, bool isSimInitialized);
+       //Start the alert in case of incoming call
+       void StartAlert(CallInfo& incomingCallInfo);
+       //Stop the alert in case of incoming call
+       void StopAlert(void);
+       //Gets the contact for the given phonenumber.returns null if not present.
+       Tizen::Social::Contact* GetContactN(const Tizen::Base::String& phoneNumber);
+       //Fetch the incoming call details.
+       CallInfo* FetchIncomingCallDetailsN(const Tizen::Base::String& callHandle, const Tizen::Base::String& contactNumber);
+       //Function is used to auto reject the call based on call settings and return true, if rejected.
+       bool CheckIncomingCallToBeRejected(CallInfo* pIncomingCallInfo);
+       //Launch dial appcontrol for add call senario
+       result LaunchDialAppControl();
+
+       //Event Listener methods from ITelephonyEventListener
+       virtual void HandleCallConnected(Tizen::Base::Collection::IListT<CallInfo>& pCallList);
+       virtual void HandleCallDisconnected(bool isLastCall, Tizen::Base::Collection::IListT<CallInfo>& pCallList);
+       virtual void HandleConferenceCall(CallInfo& pCallInfo);
+       virtual void HandleIncomingCall(CallInfo& pCallInfo);
+       virtual void HandleCallSwapOccured(Tizen::Base::Collection::IListT<CallInfo>& pCallList);
+       virtual void HandleConferenceChange(void);
+       virtual void HandleTelephonyError(int errorCode);
+       //From IAppControlResponseListener
+       virtual void OnAppControlCompleteResponseReceived(const Tizen::App::AppId& appId, const Tizen::Base::String& operationId, Tizen::App::AppCtrlResult appControlResult, const Tizen::Base::Collection::IMap* pExtraData);
+
+private:
+       static CallPresentationModel* __pInstance;
+       //to forward telephony events
+       ITelephonyEventListener* __pTelEventListener;
+       TelephonyManager* __pTelephonyMgr;
+       SettingsPresentationModel* __pSettingsPresentor;
+       // This is only to save PhoneApp from closing when only 1 incoming call is present and
+       // incoming call is rejected with "Reject With message" by opening Msg AppControl.
+       bool __isMessageAppControlRunning;
+       bool __isDialAppControlRunning;
+};
+
+#endif // _PHN_CALL_PRESENTATION_MODEL_H_
diff --git a/inc/CallRejectInfo.h b/inc/CallRejectInfo.h
new file mode 100644 (file)
index 0000000..52603d5
--- /dev/null
@@ -0,0 +1,71 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallRejectInfo.h
+ * @brief              This is the header file for the %CallRejectInfo class.
+ *
+ * This header file contains the declarations for %CallRejectInfo class.
+ */
+#ifndef _PHN_CALL_REJECT_INFO_H_
+#define _PHN_CALL_REJECT_INFO_H_
+
+#include <FBase.h>
+#include "CallSettingsConstants.h"
+
+/**
+ * @class CallRejectInfo
+ * @brief This class holds information about currently active Single party calls.
+ *
+ */
+class CallRejectInfo
+       : public Tizen::Base::Object
+{
+
+public:
+       // Default Constructor
+       CallRejectInfo(void);
+       virtual ~CallRejectInfo(void);
+       /**
+        * This is the equality operator for this CallRejectInfo.
+        * returns true, if both have same value for call handle.
+        *
+        * @param[in]   rhs     A reference to the %CallRejectInfo instance
+        */
+       bool operator ==(const CallRejectInfo& rhs) const;
+
+       /**
+        * This is the InEquality operator for this CallRejectInfo.
+        * returns true, if value for call handle is different.
+        *
+        * @param[in]   rhs     A reference to the %CallRejectInfo instance
+        */
+       bool operator !=(const CallRejectInfo& rhs) const;
+
+       /**
+        * This is the assignment operator for this class.
+        * @param[in]   rhs     A reference to the %CallRejectInfo instance
+        */
+       CallRejectInfo& operator =(const CallRejectInfo& rhs);
+
+public:
+       int rowId;
+       Tizen::Base::String phoneNumber;
+       CallRejectMatchCondition rejectCondition;
+       bool isActivated;
+};
+
+#endif // _PHN_CALL_REJECT_INFO_H_
diff --git a/inc/CallSceneRegister.h b/inc/CallSceneRegister.h
new file mode 100644 (file)
index 0000000..2e60913
--- /dev/null
@@ -0,0 +1,77 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallSceneRegister.h
+ * @brief              This is the header file for the %SceneRegister class.
+ *
+ * This header file contains the declarations for %SceneRegister class.
+ */
+#ifndef _PHN_SCENE_REGISTER_H_
+#define _PHN_SCENE_REGISTER_H_
+
+//Constants - Call Scene name
+extern const wchar_t* IDSCN_SCENE_OUTCALL;
+extern const wchar_t* IDSCN_SCENE_OUT_EMERGENCYCALL;
+extern const wchar_t* IDSCN_SCENE_INCOMINGCALL;
+extern const wchar_t* IDSCN_SCENE_ACTIVECALL;
+extern const wchar_t* IDSCN_SCENE_ACTIVE_EMERGENCYCALL;
+extern const wchar_t* IDSCN_SCENE_CONFCALL;
+extern const wchar_t* IDSCN_SCENE_CONFCALLLIST;
+extern const wchar_t* IDSCN_SCENE_ENDCALL;
+extern const wchar_t* IDSCN_SCENE_MULTIPLEACTIVECALL;
+//Settings Scene name
+extern const wchar_t* IDSCN_SCENE_MAIN_SETTING_MENU;
+extern const wchar_t* IDSCN_SCENE_CALL_REJECTLIST_MENU;
+extern const wchar_t* IDSCN_SCENE_CALL_REJECTMSGS_MENU;
+extern const wchar_t* IDSCN_SCENE_SPEED_DIAL;
+extern const wchar_t* IDSCN_SCENE_MORE_OPTIONS;
+extern const wchar_t* IDSCN_SCENE_CALL_STATUSTONES;
+extern const wchar_t* IDSCN_SCENE_CALLTYPE_FORWARD;
+extern const wchar_t* IDSCN_SCENE_CALL_FORWARD_OPTIONS;
+extern const wchar_t* IDSCN_SCENE_CALLTYPE_BARRING;
+extern const wchar_t* IDSCN_SCENE_CALL_BARRING_OPTIONS;
+extern const wchar_t* IDSCN_SCENE_CALL_WAITING_OPTIONS;
+extern const wchar_t* IDSCN_SCENE_ADD_REJECT_NUMBER;
+extern const wchar_t* IDSCN_SCENE_AUTO_AREA_CODE;
+extern const wchar_t* IDSCN_SCENE_ADD_REJECT_MSG;
+extern const wchar_t* IDSCN_SCENE_EDIT_REJECT_MSG;
+extern const wchar_t* IDSCN_SCENE_FORWARD_TO_NUMBER;
+extern const wchar_t* IDSCN_SCENE_NOREPLY_FORWARD_TO_NUMBER;
+extern const wchar_t* IDSCN_SCENE_SET_BARRING_PWD;
+extern const wchar_t* IDSCN_SCENE_DEL_NUMBER;
+extern const wchar_t* IDSCN_SCENE_DEL_MESSAGE;
+//Dialer & Call Log Scene names
+extern const wchar_t* IDSCN_DIALER;
+extern const wchar_t* IDSCN_CALL_LOG;
+extern const wchar_t* IDSCN_CALL_LOG_DETAILS;
+
+/**
+ * @class SceneRegister
+ * @brief This class presents function to register all scenes.
+ *
+ */
+class SceneRegister
+{
+public:
+       SceneRegister(void);
+       ~SceneRegister(void);
+
+       //This function is used to register all scenes.
+       static result RegisterAllScenes(void);
+};
+
+#endif // _PHN_SCENE_REGISTER_H_
diff --git a/inc/CallSettingDataService.h b/inc/CallSettingDataService.h
new file mode 100644 (file)
index 0000000..c623203
--- /dev/null
@@ -0,0 +1,111 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallSettingDataService.h
+ * @brief              This is the header file for the %CallSettingDataService class.
+ *
+ * This header file contains the declarations for %CallSettingDataService class.
+ */
+#ifndef _PHN_CALL_SETTING_DATA_SERVICE_H_
+#define _PHN_CALL_SETTING_DATA_SERVICE_H_
+
+#include <FApp.h>
+#include <FBase.h>
+#include <FIo.h>
+#include "CallRejectInfo.h"
+#include "CallSpeedDialInfo.h"
+
+/**
+ * @class CallSettingDataService
+ * @brief This class providing database service APIS to CallRejectInfo Application forms
+ *
+ */
+class CallSettingDataService
+{
+public:
+       /**
+        * Creates an instance of its own.
+        * creates CallSettingDataService(singleton) if it does not exist else returns the existing form
+        */
+       static CallSettingDataService* CreateInstance(void);
+
+       virtual ~CallSettingDataService(void);
+
+       ///Opens the Database.
+       /**
+        * Only one Database is maintained. Its name is hardcoded.
+        * It is assumed that OpenDB is called once while starting the application and CloseDB is called once while closing application.
+        */
+       result OpenDatabase(void);
+
+       ///Closes the Database
+       result CloseDatabase(void);
+
+       ///Creates a database table to store CallRejectInfo information
+       result CreateCallRejectTableDatabase(void);
+       ///Creates a database table to store SpeedDial information
+       result CreateSpeedDialTableDatabase(void);
+       ///Searches for a keyword in the CallRejectInfo Contents from Database
+       /**
+        * @param search keyword
+        * @param Linked list to store the result of the search
+        */
+       bool IsCallToBeRejected(Tizen::Base::String& phoneNumber);
+
+private:
+       /**
+        * Constructor
+        * made private as CallSettingDataService a singleton.
+        */
+       CallSettingDataService(void);
+
+       /**
+        * Copy constructor
+        * made private as CallSettingDataService a singleton.
+        */
+       CallSettingDataService(const CallSettingDataService& dataService);
+
+       /**
+        * Operator =
+        * made private as CallSettingDataService a singleton.
+        */
+       CallSettingDataService& operator =(const CallSettingDataService& dataService);
+
+       //checks if the condition is applicable for the passed phoneNumber
+       bool CheckRejectCondition(Tizen::Base::String& phoneNumber, CallRejectInfo& callRejectInfo);
+
+       ///singleton CallSettingDataService object
+       static CallSettingDataService* __pCallSettingDataService;
+
+       /// Database object
+       /**
+        * Its made static as we need only one instance of it across different CallSettingDataService object calls.
+        * Its created while calling OpenDB and distructed while calling CloseDB.
+        */
+       static Tizen::Io::Database* __pDatabase;
+
+       ///name of the database
+       const Tizen::Base::String __strDbName;
+
+       /// an Enumerator used to iterate through the results of a database query.
+       Tizen::Io::DbEnumerator* __pEnum;
+
+       /// Used to create and execute database statements(queries)
+       Tizen::Io::DbStatement* __pStmt;
+};
+
+#endif /* _PHN_CALL_SETTING_DATA_SERVICE_H_ */
diff --git a/inc/CallSettingsConstants.h b/inc/CallSettingsConstants.h
new file mode 100644 (file)
index 0000000..39c8b7c
--- /dev/null
@@ -0,0 +1,146 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallSettingsConstants.h
+ * @brief              This is the header file for providing common constants across application.
+ *
+ */
+#ifndef _PHN_SETTINGS_CONSTANTS_H_
+#define _PHN_SETTINGS_CONSTANTS_H_
+
+#include <FBase.h>
+#include <FMedia.h>
+#include <FGraphics.h>
+
+
+enum CallForwardCondition
+{
+       CALL_FORWARD_ALL, /* Forward All Calls */
+       CALL_FORWARD_BUSY,        /* Forward if Busy */
+       CALL_FORWARD_NO_REPLY,      /* Forward if No Reply */
+       CALL_FORWARD_NOT_REACHABLE      /* Forward if Not Reachable */
+};
+
+enum CallBarringType
+{
+       CALL_BARRING_ALL_OUTGOING,  /* Barring All Outgoing Calls */
+       CALL_BARRING_INTERNATIONAL_OUTGOING, /* Barring Outgoing International Calls */
+       CALL_BARRING_INTERNATIONAL_EXCEPT_HOME, /* Barring Outgoing International Calls except to Home Country */
+       CALL_BARRING_ALL_INCOMING,                /* Barring All Incoming Calls */
+       CALL_BARRING_INCOMING_ROAMING       /* Barring Incoming Calls when roam*/
+};
+
+
+
+enum CallRejectMatchCondition
+{
+       CALL_REJECT_MATCH_EXACTLY = 1,
+       CALL_REJECT_MATCH_START,
+       CALL_REJECT_MATCH_END,
+       CALL_REJECT_MATCH_INCLUDE,
+};
+
+enum CallState
+{
+       /** No call connected */
+       CALL_STATE_CALL_OFF = 0,
+       /** Voice call is connecting */
+       CALL_STATE_CALL_VOICE_CONNECTING,
+       /** Voice call is connected */
+       CALL_STATE_CALL_VOICE_ACTIVE,
+       /** Video call is connecting */
+       CALL_STATE_CALL_VIDEO_CONNECTING,
+       /** Video call is connecting */
+       CALL_STATE_CALL_VIDEO_ACTIVE,
+
+       CALL_STATE_MAX
+
+};
+
+//Settings UI contants
+//   Colors used in List views  //
+extern const unsigned int COLOR_GROUP_ITEM_BG;
+extern const unsigned int COLOR_LIST_MENU_ITEM;
+extern const unsigned int COLOR_SECONDDEPTH_ITEM_BG;
+extern const unsigned int COLOR_HELP_ITEM_BG;
+extern const unsigned int COLOR_NORMAL_MAIN_TXT;
+extern const unsigned int COLOR_NORMAL_SUB_TXT;
+extern const unsigned int COLOR_PRESS_SUB_TXT;
+extern const unsigned int COLOR_PRESS_MAIN_TXT;
+extern const unsigned int COLOR_HELP_TXT;
+extern const unsigned int COLOR_LEFT_HEADER_EXPAND_ITEMS;
+//Main List Option text
+extern const unsigned int COLOR_MAIN_TXT;
+//Main List text
+extern const int FONT_SIZE_MAIN_TXT;
+extern const int FONT_SIZE_SUB_TXT;
+//Help text
+extern const int FONT_SIZE_HELP_TXT;
+extern const int W_HDR_FTR_ICON;
+extern const int H_HDR_FTR_ICON;
+//Processing Animation constants
+extern const int IDI_ANIM_DURATION;
+extern const int IDI_ANIM_PROGRESS_COUNT;
+//Delete List
+extern const unsigned int COLOR_NORMAL_ITEM_BG;
+extern const unsigned int COLOR_PRESS_ITEM_BG;
+extern const unsigned int COLOR_SELECTALL_ITEM_BG;
+
+// Dimensions used in List views //
+// menu item height
+extern const int H_LIST_HIDDENGROUP_ITEM;
+extern const int H_LIST_NORMAL_MENU_ITEM;
+extern const int H_LIST_DROPDOWN_MENU_ITEM;
+extern const int H_LIST_MENU_SINGLELINE_HLPTXT_ITEM;
+extern const int H_LIST_MENU_TWOLINE_HLPTXT_ITEM;
+//text item height
+extern const int H_LIST_NORMAL_TXT_ITEM;
+extern const int H_LIST_SUB_TXT_ITEM;
+//Two line text for Drop down menu item
+extern const int H_LIST_DROPDOWN_TXT_ITEM;
+//single line text
+extern const int X_LIST_MENU_TEXT_ITEM;
+extern const int Y_LIST_MENU_TEXT_ITEM;
+//Help text
+extern const int X_LIST_MENU_HLPTXT_ITEM;
+extern const int Y_LIST_MENU_HLPTXT_ITEM;
+//custom Item for Bg line
+extern const int Y_CUSTOM_BG_ELEMENT;
+//Position for delete list item
+extern const int X_DEL_LIST_ELEMENT;
+extern const int Y_DEL_LIST_ELEMENT;
+
+// Dimensions for icons //
+//Expand icon for DropDown Menu Items
+extern const int W_EXPAND_ICON;
+extern const int H_EXPAND_ICON;
+extern const int W_SLIDER_ICON;
+extern const int H_SLIDER_ICON;
+//contact icon for Add Rejected Number view
+extern const int W_CONTACT_ICON;
+extern const int H_CONTACT_ICON;
+//Dimensions for custom bg line
+extern const int W_CUSTOM_BG_ELEMENT;
+//Item Width for delete list
+extern const int W_DELETE_LIST_ITEM;
+//Width of Blue Header Rectangle for expandable group items
+extern const int W_LEFT_HEADER_EXPAND_ITEMS;
+
+
+
+
+#endif // _PHN_SETTINGS_CONSTANTS_H_
diff --git a/inc/CallSettingsManager.h b/inc/CallSettingsManager.h
new file mode 100644 (file)
index 0000000..93c9524
--- /dev/null
@@ -0,0 +1,120 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallSettingsManager.h
+ * @brief              This is the header file for the %SettingsManager class.
+ *
+ * This header file contains the declarations for %SettingsManager class.
+ */
+#ifndef _PHN_SETTINGS_MANAGER_H_
+#define _PHN_SETTINGS_MANAGER_H_
+
+#include <FBase.h>
+#include <FIo.h>
+#include <FSocial.h>
+#include <FSysSettingInfo.h>
+#include "ITapiCall.h"
+#include "ITapiSs.h"
+#include "tapi_common.h"
+#include "TapiUtility.h"
+#include "TelCall.h"
+#include "TelSs.h"
+#include "vconf.h"
+#include "CallRejectInfo.h"
+#include "CallISettingsEventListener.h"
+#include "CallSettingsConstants.h"
+#include "CallSettingDataService.h"
+
+/**
+ * @class SettingsManager
+ * @brief This class provides functionality to set and fetch settings related to voice call, e.g. Call barring,
+ * call forwarding, etc.
+ */
+class SettingsManager
+: public Tizen::System::ISettingEventListener
+{
+public:
+       //create a singleton instance
+       static SettingsManager* GetInstance(void);
+
+private:
+       //constructor
+       SettingsManager(void);
+       SettingsManager(SettingsManager& manager);
+       SettingsManager& operator =(const SettingsManager& manager);
+
+       result Construct(void);
+       static void CreateInstance(void);
+       static void DestroyInstance(void);
+
+public:
+       // Add the observer for setting events
+       void AddSettingEventListener(ISettingsEventListener* pSettingsEventListener);
+       //remove the observer for setting events
+       void RemoveSettingEventListener(ISettingsEventListener* pSettingsEventListener);
+       // Get the reject message list
+       Tizen::Base::Collection::IMapT<int,Tizen::Base::String>* GetRejectMessageListN(void);
+       // Get the reject "unknown" status
+       bool GetUnknownRejectStatus(void);
+       // checks if the call is to be rejected
+       bool IsCallToBeRejected(Tizen::Base::String& phoneNumber);
+
+       result SetCallState(CallState callState);
+
+       void AddSystemEventListener(void);
+
+       void RemoveSystemEventListener(void);
+
+       virtual void OnSettingChanged(Tizen::Base::String& key);
+
+       bool GetFlightModeStatus(void);
+
+private:
+
+       enum ForwardResponseType
+       {
+               SET_CALLFORWARD_RESPONSE,
+               GET_CALLFORWARD_RESPONSE,
+       };
+       enum BarringResponseType
+       {
+               SET_CALLBARRING_RESPONSE,
+               GET_CALLBARRING_RESPONSE,
+       };
+       enum WaitingResponseType
+       {
+               SET_CALLWAITING_RESPONSE,
+               GET_CALLWAITING_RESPONSE,
+       };
+private:
+       virtual ~SettingsManager(void);
+       //notify event listeners for Setting or Getting Call Forwarding status events.
+       void NotifyForwardingEventListeners(ForwardResponseType responseType, bool isCallSuccessful, CallForwardCondition callFwdCondition, const Tizen::Base::String& callFwdNumber, bool isCallForwardActivated, int noReplyWaitTime);
+       //notify event listeners for Setting or Getting Call Barring status events.
+       void NotifyBarringEventListeners(BarringResponseType responseType, bool isCallSuccessful, CallBarringType callBarringType, bool isBarringActivated);
+       //notify event listeners for Setting or Getting Call Waiting status events.
+       void NotifyWaitingEventListeners(WaitingResponseType responseType, bool isCallSuccessful, bool isCallWaitingActivated);
+
+private:
+       static SettingsManager* __pInstance;
+       //handle to Telephony API
+       TapiHandle* __pTapiHandle;
+       Tizen::Base::Collection::ArrayListT<ISettingsEventListener*>* __pSettingsEventListener;
+       CallSettingDataService* __pCallSettingDataService;
+};
+
+#endif // _PHN_SETTINGS_MANAGER_H_
diff --git a/inc/CallSettingsPresentationModel.h b/inc/CallSettingsPresentationModel.h
new file mode 100644 (file)
index 0000000..3c32e5e
--- /dev/null
@@ -0,0 +1,87 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallSettingsPresentationModel.h
+ * @brief              This is the header file for the %SettingsPresentationModel class.
+ *
+ * This header file contains the declarations for %SettingsPresentationModel class.
+ */
+#ifndef _PHN_SETTINGS_PRESENTATION_MODEL_H_
+#define _PHN_SETTINGS_PRESENTATION_MODEL_H_
+
+#include <FSocial.h>
+#include "CallISettingsEventListener.h"
+
+class SettingsManager;
+class CallRejectInfo;
+class SpeedDialInfo;
+
+/**
+ * @class SettingsPresentationModel
+ * @brief This class provides data to settings forms and provides functions
+ * to interact with Settings manager.
+ *
+ */
+class SettingsPresentationModel: public ISettingsEventListener
+{
+public:
+       //create a singleton instance
+       static SettingsPresentationModel* GetInstance(void);
+
+private:
+       SettingsPresentationModel(void);
+       SettingsPresentationModel(SettingsPresentationModel& presentor);
+       virtual ~SettingsPresentationModel(void);
+       SettingsPresentationModel& operator =(const SettingsPresentationModel& presentor);
+
+       //perform 2nd phase initialization
+       result Construct(void);
+       static void CreateInstance(void);
+       static void DestroyInstance(void);
+
+public:
+       // Add the observer for setting events
+       result AddSettingEventListener(ISettingsEventListener* pSettingsEventListener);
+       //remove the observer for setting events
+       void RemoveSettingEventListener(void);
+       // Get the reject message list
+       Tizen::Base::Collection::IMapT<int,Tizen::Base::String>* GetRejectMessageListN(void);
+       // checks if the call is to be rejected
+       bool IsCallToBeRejected(Tizen::Base::String& phoneNumber);
+       //Sets the call state
+       result SetCallState(CallState callState);
+       //Get Flight mode status
+       bool GetFlightModeStatus(void);
+
+protected:
+       //From ISettingsEventListener
+       virtual void HandleGetCallWaitingResponse(bool isCallSuccessful, bool callWaitingActivated);
+       virtual void HandleSetCallWaitingResponse(bool isCallSuccessful, bool isCallWaitingEnabled);
+       virtual void HandleGetCallForwardResponse(bool isCallSuccessful, CallForwardCondition callFwdCondition, const Tizen::Base::String& callFwdNumber, bool callForwardActivated, int noReplyWaitTime);
+       virtual void HandleSetCallForwardResponse(bool isCallSuccessful, CallForwardCondition callFwdCondition, const Tizen::Base::String& callFwdNumber, bool isCallForwardActivated, int noReplyWaitTime);
+       virtual void HandleGetCallBarringResponse(bool isCallSuccessful, CallBarringType callBarringType, bool isBarringActivated);
+       virtual void HandleSetCallBarringResponse(bool isCallSuccessful, CallBarringType callBarringType, bool isBarringActivated);
+       virtual void HandleFlightMode(bool isFlightModeActivated);
+
+private:
+       static SettingsPresentationModel* __pInstance;
+       //Owned. Is responsible for destroying the instance
+       SettingsManager* __pSettingsMgr;
+       ISettingsEventListener* __pSettingsEventListener;
+};
+
+#endif // _PHN_SETTINGS_PRESENTATION_MODEL_H_
diff --git a/inc/CallSoundManager.h b/inc/CallSoundManager.h
new file mode 100644 (file)
index 0000000..9fd2e9b
--- /dev/null
@@ -0,0 +1,90 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallSoundManager.h
+ * @brief              This is the header file for the %SoundManager class.
+ *
+ * This header file contains the declarations for %SoundManager class.
+ */
+#ifndef _PHN_SOUND_MANAGER_H_
+#define _PHN_SOUND_MANAGER_H_
+
+#include <FBase.h>
+#include <FSystem.h>
+#include <FMedia.h>
+#include "sound_manager.h"
+#include "vconf.h"
+#include "vconf-keys.h"
+#include "CallTypes.h"
+
+using namespace Tizen::Base::Runtime;
+/**
+ * @class SoundManager
+ * @brief This class presents sound related functionality required in call module.
+ *
+ */
+class SoundManager
+       : public Tizen::Media::IPlayerEventListener
+       , public Tizen::Base::Runtime::ITimerEventListener
+{
+public:
+       SoundManager(void);
+       virtual ~SoundManager(void);
+       //start the sound manager session
+       result StartSession(void);
+       //Change the speaker status
+       result SetSpeakerStatus(bool setSpeaker);
+       //Set the sound mode for the call
+       result SetSoundMode(SoundMode soundMode);
+       void StartAlert(Tizen::Base::String& contactRingTone);
+       void StopAlert(void);
+       //set connect tone
+       void SetConnectTone(void);
+       void SetMinuteReminderTone(void);
+       void SetDisconnectTone(void);
+       result StopSession(void);
+       Timer* GetTimer();
+       bool GetLastConferenceCall();
+       void SetlastEndedConferenceCall();
+
+protected:
+               virtual void OnPlayerOpened(result r);
+               virtual void OnPlayerEndOfClip(void);
+               virtual void OnPlayerSeekCompleted(result r);
+               virtual void OnPlayerBuffering(int percent);
+               virtual void OnPlayerErrorOccurred(Tizen::Media::PlayerErrorReason r);
+               virtual void OnPlayerInterrupted(void);
+               virtual void OnPlayerReleased(void);
+               virtual void OnTimerExpired(Timer& timer);
+
+private:
+       bool IsEarJackConnected(void);
+
+private:
+       //Sound manager handle
+       sound_call_session_h __pSoundCallSession;
+       //For notifying via vibrate during incoming call
+       Tizen::System::Vibrator* __pVibrator;
+       // Audio player
+       Tizen::Media::Player* __pPlayer;
+       bool __isSoundStatusOn;
+       bool __isVibrateStatusOn;
+    Timer __timer;
+       bool __lastEndedConferenceCall;
+};
+
+#endif /* _PHN_SOUND_MANAGER_H_ */
diff --git a/inc/CallSpeedDialInfo.h b/inc/CallSpeedDialInfo.h
new file mode 100644 (file)
index 0000000..ffb6cc7
--- /dev/null
@@ -0,0 +1,70 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallSpeedDialInfo.h
+ * @brief              This is the header file for the %SpeedDialInfo class.
+ *
+ * This header file contains the declarations for %SpeedDialInfo class.
+ */
+#ifndef _PHN_SPEED_DIAL_INFO_H_
+#define _PHN_SPEED_DIAL_INFO_H_
+
+#include <FBase.h>
+#include "CallSettingsConstants.h"
+
+/**
+ * @class SpeedDialInfo
+ * @brief This class holds information about speed dial mappings fetched/stored from database.
+ *
+ */
+class SpeedDialInfo
+       : public Tizen::Base::Object
+{
+
+public:
+       // Default Constructor
+       SpeedDialInfo(void);
+       virtual ~SpeedDialInfo(void);
+       /**
+        * This is the equality operator for this SpeedDialInfo.
+        * returns true, if both have same value for call handle.
+        *
+        * @param[in]   rhs     A reference to the %SpeedDialInfo instance
+        */
+       bool operator ==(const SpeedDialInfo& rhs) const;
+
+       /**
+        * This is the InEquality operator for this SpeedDialInfo.
+        * returns true, if value for call handle is different.
+        *
+        * @param[in]   rhs     A reference to the %SpeedDialInfo instance
+        */
+       bool operator !=(const SpeedDialInfo& rhs) const;
+
+       /**
+        * This is the assignment operator for this class.
+        * @param[in]   rhs     A reference to the %SpeedDialInfo instance
+        */
+       SpeedDialInfo& operator =(const SpeedDialInfo& rhs);
+
+public:
+       int rowId;
+       int keyMapping;
+       Tizen::Base::String contactId;
+};
+
+#endif // _PHN_SPEED_DIAL_INFO_H_
diff --git a/inc/CallSpeedDialPopup.h b/inc/CallSpeedDialPopup.h
new file mode 100644 (file)
index 0000000..cfd5913
--- /dev/null
@@ -0,0 +1,71 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallSpeedDialPopup.h
+ * @brief              This is the header file for the %SpeedDialPopup class.
+ *
+ * This header file contains the declarations for %SpeedDialPopup class.
+ */
+#ifndef _PHN_SPEED_DIAL_POPUP_H_
+#define _PHN_SPEED_DIAL_POPUP_H_
+
+#include <FApp.h>
+#include <FUi.h>
+
+#include "CallIPopupItemSelectListener.h"
+
+/**
+ * @class SpeedDialPopup
+ * @brief This class provides popup messages in Speed dial settings form.
+ *
+ */
+class SpeedDialPopup
+       : public Tizen::Ui::Controls::Popup
+       , public Tizen::Ui::Controls::IListViewItemEventListener
+       , public Tizen::Ui::Controls::IListViewItemProvider
+       , public Tizen::Ui::IActionEventListener
+{
+
+public:
+       SpeedDialPopup(IPopupItemSelectListener& listener);
+       virtual ~SpeedDialPopup(void);
+       int Initialize(void);
+
+       // IListViewItemEventListener
+       virtual void OnListViewContextItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListContextItemStatus state);
+       virtual void OnListViewItemStateChanged(Tizen::Ui::Controls::ListView& listView, int index, int elementId, Tizen::Ui::Controls::ListItemStatus status);
+       virtual void OnListViewItemSwept(Tizen::Ui::Controls::ListView& listView, int index, Tizen::Ui::Controls::SweepDirection direction);
+       virtual void OnListViewItemLongPressed(Tizen::Ui::Controls::ListView& listView, int index, int elementId, bool& invokeListViewItemCallback);
+
+       //IListViewItemProvider
+       virtual Tizen::Ui::Controls::ListItemBase* CreateItem(int index, int itemWidth);
+       virtual bool DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth);
+       virtual int GetItemCount(void);
+
+       // From IActionEventListener
+       void OnActionPerformed(const Tizen::Ui::Control& source, int actionId);
+
+private:
+       void ConstructListData(void);
+
+private:
+       Tizen::Ui::Controls::Button* __pCancelButton;
+       IPopupItemSelectListener& __popupListener;
+       Tizen::Base::Collection::ArrayList* __pListItemArray;
+};
+
+#endif // _PHN_SPEED_DIAL_POPUP_H_
diff --git a/inc/CallTelephonyManager.h b/inc/CallTelephonyManager.h
new file mode 100644 (file)
index 0000000..3f2e543
--- /dev/null
@@ -0,0 +1,212 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallTelephonyManager.h
+ * @brief              This is the header file for the %TelephonyManager class.
+ *
+ * This header file contains the declarations for %TelephonyManager class.
+ */
+#ifndef _PHN_TELEPHONY_MANAGER_H_
+#define _PHN_TELEPHONY_MANAGER_H_
+
+#include <FBase.h>
+#include <FSocial.h>
+#include "ITapiCall.h"
+#include "TapiUtility.h"
+#include "CallITelephonyEventListener.h"
+#include "CallSoundManager.h"
+#include "CalllogManager.h"
+
+class CallInfo;
+class SettingsManager;
+
+/**
+ * @class TelephonyManager
+ * @brief TelephonyManager is a singleton class used to intialize TAPI library.
+ * And register to telephony events, interact with TAPI library.
+ */
+class TelephonyManager
+{
+public:
+       //Get singleton instance
+       static TelephonyManager* GetInstance(ITelephonyEventListener* pEventListener);
+       //Function to initiate (dial) an outgoing call.
+       ErrorCodes SetupMoCall(Tizen::Base::String& contactNumber, bool isEmergency);
+       //Function to end a call
+       result EndActiveCall(Tizen::Base::Long callHandle);
+       result EndDialingCall(Tizen::Base::String& contactNumber);
+       //Function to accept/reject an incoming call
+       result AnswerCall(int callHandle, bool acceptCall);
+       //Function to accept call with the given options
+       result AcceptCall(CallAnsweringOptions answerOptions,int callHandle);
+       //Function to end a conference call
+       result EndConferenceCall(void);
+       //Function to hold/retrieve a conference call
+       result HoldConferenceCall(bool holdCall);
+       //Function to join active and held call to conference
+       result JoinCall(void);
+       //Function to hold/unhold the call
+       result HoldCall(Tizen::Base::Long callHandle, bool holdCall);
+       //Function to swap the active and held call
+       result SwapCalls(void);
+       //Function to send DTMF strings
+       result SendCallDTMF(Tizen::Base::String& textToBeSent);
+       //Function to end a single call from the conference
+       result EndFromConference(int callHandle);
+       //Function to split a single call from the conference
+       result SplitFromConference(int callHandle);
+       //Function to set the mute status
+       result SetMuteStatus(bool setMute);
+       //Function to get the mute Status
+       bool IsCallMuted(void);
+       //Function to set the speaker status
+       result SetSpeakerStatus(bool setSpeaker);
+       //Function to get the speaker status
+       bool IsSpeakerOn(void);
+       //Function to check if split operation is allowed from the conference
+       bool IsSplitAllowed(void);
+       //Function to get the conference call info
+       CallInfo* GetConferenceCallInfoN(void);
+       //Get the current call list
+       Tizen::Base::Collection::IListT<CallInfo>* GetCallListN(void);
+       //Get the current call count
+       int GetCurrentCallCount(void);
+       //Start the alert in case of incoming call
+       void StartAlert(CallInfo& incomingCallInfo);
+       //Stop the alert in case of incoming call
+       void StopAlert(void);
+       //Main Callback function used while registering to TAPI
+       static void HandleCallback(TapiHandle* pHandle, const char* pNotiId, void* pData, void* pUserData);
+       //Dummy callback function used when nothing is to be done on response
+       static void HandleCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData);
+       //callback function for dial operation
+       static void HandleDialCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData);
+       //callback function for the join operation
+       static void HandleJoinCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData);
+       //callback function for the reject call operation
+       static void HandleRejectCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData);
+       //callback function for the swap calls operation
+       static void HandleSwapCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData);
+       //callback function for the End from conference operation
+       static void HandleEndFromConferenceCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData);
+       //callback function for the split from conference operation
+       static void HandleSplitFromConferenceCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData);
+       //callback function for Ending conference call
+       static void HandleEndConferenceCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData);
+       //Check if MOCall is emergency number and returns true. Otherwise, false.
+       bool CheckIfMOCallIsEmergency(const Tizen::Base::String& contactNumber, bool isSimInitialized);
+       //Check is modem and sim are initialised successfully and MO call can be made.
+       result CheckIfMOCallIsPossible();
+       //Gets the contact for the given phonenumber.returns null if not present.
+       Tizen::Social::Contact* GetContactN(const Tizen::Base::String& phoneNumber);
+       //This function make a synchronus API call to TAPI to fetch active/waiting incoming calls.
+       CallInfo* FetchIncomingCallHandleN(const Tizen::Base::String& callHandle, const Tizen::Base::String& contactNumber);
+       //This callback function is called by TAPI each time for every single call.
+       static void HandleIncomingCallStatusCallBack(TelCallStatus_t* pCallStatus, void* pUserData);
+       //function used to process incoming call and decide whether to reject call based on call settings.
+       //Rejects the call and returns true, Else returns false.
+       bool CheckIncomingCallToBeRejected(CallInfo* pIncomingCallInfo);
+       //End all active
+       void EndAllCalls(void);
+       
+protected:
+       //function to handle the idle callback(received when call is ended)
+       void HandleIdleCallBack(void* pData);
+       //function used to handle events for normal call disconnected.
+       bool HandleEndNormalActiveCall(CallInfo& endCallInfo);
+       //function to handle the active callback(received when call is connected)
+       void HandleActiveCallBack(void* pData);
+       //function to handle call connected successfully
+       void HandleCallConnected(unsigned int connectedCallHandle);
+       //function to handle the dial call callback
+       void HandleDialingCallBack(void* pData);
+       //function to handle ending of single participant in conference call.
+       bool HandleParticipantEndedFromConference(unsigned int participantCallHandle, CallInfo& conferenceCall);
+
+private:
+       //create a singleton instance
+       static void CreateInstance(ITelephonyEventListener* pEventListener);
+       //used to destroy 'TelephonyManager' instance at application exit.
+       static void DestroyInstance(void);
+       //private destructor
+       virtual ~TelephonyManager(void);
+       TelephonyManager(ITelephonyEventListener* pEventListener);
+       TelephonyManager(TelephonyManager& manager);
+       TelephonyManager& operator =(TelephonyManager& manager);
+       //perform 2nd phase initialisation
+       result Initialize(void);
+       //initialise the TAPI library
+       result InitializeTelephonyLibrary(void);
+       //register for the TAPI events
+       int RegisterEvents(void);
+       //unregister from the TAPI events
+       void UnregisterEvents(void);
+       //internal function to hold an active call
+       result HoldActiveCall(CallInfo* pActiveCallInfo, bool holdCall);
+       //internal function to make a call
+       result DialOutgoingCall(Tizen::Base::String& contactNumber, bool isEmergency);
+       //internal function to handle waiting call options when single call is present
+       result AcceptSecondCall(CallAnsweringOptions answerOptions, const int incomingCallHandle);
+       //internal function to handle waiting call options when multiple calls are present
+       result AcceptMultipleCall(CallAnsweringOptions answerOptions, const int incomingCallHandle);
+       //internal function to End Call
+       result EndCall(CallInfo& endCallInfo);
+       /**
+        * This function is internally used to fetch contact person details -
+        * display name & photo id from AddressBook for the given phone number.
+        *
+        * @param[in] phoneNumber - The substring of the phoneNumber to search
+        * @return E_SUCCESS, if found else E_FAILURE.
+        */
+       result FetchContactInfoForNumber(const Tizen::Base::String& phoneNumberStr);
+       //check if given contact number is valid and returns 'E_SUCCESS', else 'E_FAILURE'.
+       result CheckValidTelePhoneNumber(const Tizen::Base::String& contactNumber);
+       //Used to save ended call Log info to Logs database.
+       void SaveCallInfoToLogsDb(CallInfo& endCallInfo);
+
+private:
+       static TelephonyManager* __pManager;
+
+       //Outgoing call Info
+       CallInfo* __pDialedCall;
+       //Incoming call Info
+       CallInfo* __pIncomingCall;
+       //Active Calls - only 2 active calls at any time
+       //can hold both Single or Conf. Calls
+       //mapping of "Call handle" to "CallInfo"
+       Tizen::Base::Collection::HashMapT<long, CallInfo>* __pActiveCallList;
+
+       //Listener for telephony events
+       ITelephonyEventListener* __pEventListener;
+
+       SettingsManager* __pSettingsManager;
+
+       //handle to Telephony API
+       TapiHandle* __pTapiHandle;
+       //used to connect to Address Book APIs.
+       Tizen::Social::Addressbook* __pAddressBook;
+       //used to store previously fetched contact.
+       Tizen::Social::Contact* __pCachedContact;
+       //mute status
+       bool __isMuted;
+       //Speaker Status
+       bool __isSpeakerOn;
+       SoundManager* __pSoundManager;
+       CallLogManager* __pCalllogMgr;
+};
+
+#endif // _PHN_TELEPHONY_MANAGER_H_
diff --git a/inc/CallTypes.h b/inc/CallTypes.h
new file mode 100644 (file)
index 0000000..85bb024
--- /dev/null
@@ -0,0 +1,481 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CallTypes.h
+ * @brief              This is the header file provides common constants and enums used across application.
+ *
+ */
+#ifndef PHNTYPES_H_
+#define PHNTYPES_H_
+
+#include "CallCommonUtils.h"
+
+//bitmap
+extern const wchar_t* IDB_BTN_OPTION_BG_ICON ;
+extern const wchar_t* IDB_BTN_OPTION_PRESS_BG_ICON;
+extern const wchar_t* IDB_BTN_MORE_ICON ;
+extern const wchar_t* IDB_BTN_MORE_PRESS_ICON ;
+extern const wchar_t* IDB_POPUP_BUBBLE_ICON ;
+extern const wchar_t* IDB_DIALER_BTN_LINE_ICON;
+extern const wchar_t* IDB_DIALER_BTN_PRESS_ICON;
+extern const wchar_t* IDB_VOICEMAIL_BTN_ICON;
+extern const wchar_t* IDB_VOICEMAIL_BTN_PRESS_ICON;
+extern const wchar_t* IDB_DIALER_BTN_LINE2_ICON;
+extern const wchar_t* IDB_DIALER_BTN_LINE3_ICON;
+extern const wchar_t* IDB_DIALER_BTN_LINE4_ICON;
+extern const wchar_t* IDB_DIALER_BTN_LINE5_ICON;
+extern const wchar_t* IDB_DIALER_STAR_ICON ;
+extern const wchar_t* IDB_DIALER_MUTE_ICON ;
+extern const wchar_t* IDB_DIALER_VIDEOCALL_ICON ;
+extern const wchar_t* IDB_DIALER_CALL_ICON ;
+extern const wchar_t* IDB_DIALER_CLEAR_ICON ;
+extern const wchar_t* IDB_DIALER_CALL_BG_ICON ;
+extern const wchar_t* IDB_HIDE_KEYPAD_ICON;
+extern const wchar_t* IDB_HIDE_KEYPAD_PRESS_ICON;
+extern const wchar_t* IDB_HIDE_KEYPAD_DIM_ICON;
+extern const wchar_t* IDB_CLOSE_KEYPAD_ICON;
+extern const wchar_t* IDB_CLOSE_KEYPAD_PRESS_ICON;
+extern const wchar_t* IDB_CLOSE_KEYPAD_DIM_ICON;
+extern const wchar_t* IDB_SPEAKER_ON_ICON;
+extern const wchar_t* IDB_SPEAKER_ON_PRESS_ICON;
+extern const wchar_t* IDB_SPEAKER_ON_DIM_ICON;
+extern const wchar_t* IDB_SPEAKER_OFF_ICON;
+extern const wchar_t* IDB_SPEAKER_OFF_PRESS_ICON;
+extern const wchar_t* IDB_SPEAKER_OFF_DIM_ICON;
+extern const wchar_t* IDB_MUTE_ON_ICON;
+extern const wchar_t* IDB_MUTE_ON_PRESS_ICON;
+extern const wchar_t* IDB_MUTE_ON_DIM_ICON;
+extern const wchar_t* IDB_MUTE_OFF_ICON;
+extern const wchar_t* IDB_MUTE_OFF_PRESS_ICON;
+extern const wchar_t* IDB_MUTE_OFF_DIM_ICON;
+extern const wchar_t* IDB_BACKGROUND_BITMAP;
+extern const wchar_t* IDB_VOICE_CALL_ICON;
+extern const wchar_t* IDB_VOICE_CALL_PRESS_ICON;
+extern const wchar_t* IDB_VOICE_CALL_DIM_ICON;
+extern const wchar_t* IDB_VIDEO_CALL_ICON;
+extern const wchar_t* IDB_VIDEO_CALL_PRESS_ICON;
+extern const wchar_t* IDB_VIDEO_CALL_DIM_ICON;
+extern const wchar_t* IDB_MESSAGE_ICON;
+extern const wchar_t* IDB_MESSAGE_PRESS_ICON;
+extern const wchar_t* IDB_MESSAGE_DIM_ICON;
+extern const wchar_t* IDB_END_CALL_ICON;
+extern const wchar_t* IDB_END_CALL_PRESS_ICON;
+extern const wchar_t* IDB_END_CALL_DIM_ICON;
+extern const wchar_t* IDB_ADD_CALL_ICON;
+extern const wchar_t* IDB_ADD_CALL_PRESS_ICON;
+extern const wchar_t* IDB_ADD_CALL_DIM_ICON;
+extern const wchar_t* IDB_JOIN_CALL_ICON;
+extern const wchar_t* IDB_JOIN_CALL_PRESS_ICON;
+extern const wchar_t* IDB_JOIN_CALL_DIM_ICON;
+extern const wchar_t* IDB_CONTACT_ICON;
+extern const wchar_t* IDB_CONTACT_PRESS_ICON;
+extern const wchar_t* IDB_CONTACT_DIM_ICON;
+extern const wchar_t* IDB_SWAP_ICON_NORMAL;
+extern const wchar_t* IDB_SWAP_ICON_PRESS;
+extern const wchar_t* IDB_POPUP_ARROW_ICON;
+extern const wchar_t* IDB_POPUP_BG_ICON;
+extern const wchar_t* IDB_MORE_MANAGE_CONFERENCE_ICON;
+extern const wchar_t* IDB_CONFERENCE_BG_ICON;
+extern const wchar_t* IDB_CONFERENCE_BIG_BG_ICON;
+extern const wchar_t* IDB_ACTIVE_CALL_DEFAULT_ICON;
+extern const wchar_t* IDB_MULTIPLE_CALL_DEFAULT_ICON;
+extern const wchar_t* IDB_KEYPAD_BG;
+extern const wchar_t* IDB_KEYPAD_BUTTON_PRESS;
+extern const wchar_t* IDB_KEYPAD_NUM1_ICON;
+extern const wchar_t* IDB_HOLD_NORMAL_BUTTON_ICON;
+extern const wchar_t* IDB_HOLD_PRESS_BUTTON_ICON;
+extern const wchar_t* IDB_UNHOLD_NORMAL_BUTTON_ICON;
+extern const wchar_t* IDB_UNHOLD_PRESS_BUTTON_ICON;
+extern const wchar_t* IDB_CALLOG_LIST_BG;
+extern const wchar_t* IDB_LOG_RECEIVEDCALL_ICON;
+extern const wchar_t* IDB_LOG_DIALEDCALL_ICON;
+extern const wchar_t* IDB_LOG_MISSEDCALL_ICON;
+extern const wchar_t* IDB_LOG_BLOCKEDCALL_ICON;
+extern const wchar_t* IDB_LOG_DETAIL_CALL_ICON;
+extern const wchar_t* IDB_LOG_DETAIL_MSG_ICON;
+extern const wchar_t* IDB_LOG_NO_CONTENT;
+extern const wchar_t* IDB_VIEW_CONTACT_ICON;
+extern const wchar_t* IDB_VIEW_CONTACT_PRESS_ICON;
+extern const wchar_t* IDB_VIEW_CONTACT_BG_ICON;
+extern const wchar_t* IDB_VIEW_CONTACT_BG_PRESS_ICON;
+extern const wchar_t* IDB_CALL_THUMBNAIL_BACKGROUND;
+extern const wchar_t* IDB_CALL_THUMBNAIL_SHADOW;
+
+
+
+//String messages
+extern const wchar_t* IDS_DIALER_MOBILE_STR;
+extern const wchar_t* IDS_DIALER_SPEEDDIAL_POPUP_MSG;
+extern const wchar_t* IDS_SPEEDDIAL_POP_YES_BTN_STRING;
+extern const wchar_t* IDS_SPEEDDIAL_POP_NO_BTN_STRING;
+extern const wchar_t* IDS_DIALER_MENU_ITEM_SEND_MSG;
+extern const wchar_t* IDS_DIALER_MENU_ITEM_ADD_CONTACT;
+extern const wchar_t* IDS_DIALER_MENU_ITEM_SPEED_DIAL;
+extern const wchar_t* IDS_DIALER_MENU_ITEM_ADD_PAUSE;
+extern const wchar_t* IDS_DIALER_MENU_ITEM_ADD_WAIT;
+extern const wchar_t* IDS_DIALER_MENU_ITEM_EXIT;
+extern const wchar_t* IDS_SPEED_DIAL_SEARCH_KEY;
+extern const wchar_t* IDS_KEYPAD_BTN_NAME;
+extern const wchar_t* IDS_SPEAKER_BTN_NAME;
+extern const wchar_t* IDS_MUTE_BTN_NAME;
+extern const wchar_t* IDS_VOICE_CALL_BTN_NAME;
+extern const wchar_t* IDS_VIDEO_CALL_BTN_NAME;
+extern const wchar_t* IDS_MSG_BTN_NAME;
+extern const wchar_t* IDS_ENDCALL_BTN_NAME;
+extern const wchar_t* IDS_ADDCALL_BTN_NAME;
+extern const wchar_t* IDS_JOINCALL_BTN_NAME;
+extern const wchar_t* IDS_CONTACT_BTN_NAME;
+extern const wchar_t* IDS_HOLD_BTN_NAME;
+extern const wchar_t* IDS_UNHOLD_BTN_NAME;
+extern const wchar_t* IDS_PEOPLE_STR;
+extern const wchar_t* IDS_MGR_CONF_CALL_LIST_STR;
+extern const wchar_t* IDS_LOG_CONTEXT_CALL;
+extern const wchar_t* IDS_LOG_CONTEXT_MESSAGE;
+extern const wchar_t* IDS_LOG_CONTEXT_VIDEOCALL;
+extern const wchar_t* IDS_LOG_CONTEXT_DELETE;
+extern const wchar_t* IDS_AM_TIME;
+extern const wchar_t* IDS_PM_TIME;
+extern const wchar_t* IDS_CALLLOG_NO_NAME;
+extern const wchar_t* IDS_CALLLOG_NO_NUMBER;
+extern const wchar_t* IDS_CALLLOG_RECEIVED;
+extern const wchar_t* IDS_CALLLOG_MISSED;
+extern const wchar_t* IDS_CALLLOG_OUTGOING;
+extern const wchar_t* IDS_CALLLOG_RECEIVED_MSG;
+extern const wchar_t* IDS_CALLLOG_SENT_MSG;
+extern const wchar_t* IDS_CALLLOG_REJECTED;
+extern const wchar_t* IDS_CALLLOG_DELETE_FOOTER;
+extern const wchar_t* IDS_CALLLOG_CANCEL_FOOTER;
+extern const wchar_t* IDS_EMERGENCY_CALL;
+extern const wchar_t* IDS_SELECT_CALL_LOG ;
+extern const wchar_t* IDS_SELECTED_ITEM_STRING;
+extern const wchar_t* IDS_SELECTED_ITEMS_STRING;
+extern const wchar_t* IDS_SELECT_NUMBER;
+extern const wchar_t* IDS_NUMBER_SELECTED;
+extern const wchar_t* IDS_NUMBERS_SELECTED;
+extern const wchar_t* IDS_SELECT_MESSAGE;
+extern const wchar_t* IDS_MESSAGE_SELECTED;
+extern const wchar_t* IDS_MESSAGES_SELECTED;
+extern const wchar_t* IDS_NO_LOGS;
+extern const wchar_t* IDS_FLIGHT_MODE_ON;
+extern const wchar_t* IDS_ADD_TO_CONTACTS;
+extern const wchar_t* IDS_TIMER_ON_HOLD;
+extern const wchar_t* IDS_CANCEL;
+extern const wchar_t* IDS_LOGS_TODAY;
+extern const wchar_t* IDS_LOGS_YESTERDAY;
+extern const wchar_t* IDS_REJECT_MESSAGE_CREATE;
+extern const wchar_t* IDS_VIEW_CONTACT;
+extern const wchar_t* IDS_INVALID_NUMBER;
+extern const wchar_t* IDS_NUMBER_UNKNOWN;
+//Panel
+extern const wchar_t* PANEL_DIALER;
+extern const wchar_t* PANEL_LOGS;
+
+//Corresponding Call form name
+extern const wchar_t* IDL_FORM_OUTCALL;
+extern const wchar_t* IDL_FORM_OUT_EMERGENCYCALL;
+extern const wchar_t* IDL_FORM_INCOMINGCALL;
+extern const wchar_t* IDL_FORM_ACTIVECALL;
+extern const wchar_t* IDL_FORM_ACTIVE_EMERGENCYCALL;
+extern const wchar_t* IDL_FORM_CONFCALL;
+extern const wchar_t* IDL_FORM_CONFCALLLIST;
+extern const wchar_t* IDL_FORM_ENDCALL;
+extern const wchar_t* IDL_FORM_MULTIPLEACTIVECALL;
+//Corresponding Settings form name
+extern const wchar_t* IDL_FORM_SETTINGS_PREFIX;
+extern const wchar_t* IDL_FORM_MAIN_SETTING_MENU;
+extern const wchar_t* IDL_FORM_CALL_REJECTLIST_MENU;
+extern const wchar_t* IDL_FORM_CALL_REJECTMSGS_MENU;
+extern const wchar_t* IDL_FORM_SPEED_DIAL;
+extern const wchar_t* IDL_FORM_MORE_OPTIONS;
+extern const wchar_t* IDL_FORM_CALL_STATUSTONES;
+extern const wchar_t* IDL_FORM_CALLTYPE_FORWARD;
+extern const wchar_t* IDL_FORM_CALL_FORWARD_OPTIONS;
+extern const wchar_t* IDL_FORM_CALLTYPE_BARRING;
+extern const wchar_t* IDL_FORM_CALL_BARRING_OPTIONS;
+extern const wchar_t* IDL_FORM_CALL_WAITING_OPTIONS;
+extern const wchar_t* IDL_FORM_ADD_REJECT_NUMBER;
+extern const wchar_t* IDL_FORM_AUTO_AREA_CODE;
+extern const wchar_t* IDL_FORM_ADD_REJECT_MSG;
+extern const wchar_t* IDL_FORM_EDIT_REJECT_MSG;
+extern const wchar_t* IDL_FORM_FORWARD_TO_NUMBER;
+extern const wchar_t* IDL_FORM_NOREPLY_FORWARD_TO_NUMBER;
+extern const wchar_t* IDL_FORM_SCENE_SET_BARRING_PWD;
+extern const wchar_t* IDL_FORM_DEL_NUMBER;
+extern const wchar_t* IDL_FORM_DEL_MESSAGE;
+//Dialer & Call Log Form names
+extern const wchar_t* IDL_FORM_DIAL_APP;
+extern const wchar_t* IDL_FORM_CALL_LOG_DETAIL;
+extern const wchar_t* IDL_CALL_PANEL;
+extern const wchar_t* IDL_END_CALL_PANEL;
+extern const wchar_t* IDL_OUTCALL_FORM;
+extern const wchar_t* IDL_OUT_EMERGENCYCALL_FORM;
+extern const wchar_t* IDL_CALL_FORM;
+extern const wchar_t* IDL_EMERGENCY_CALL_FORM;
+extern const wchar_t* IDL_MULTIPLE_CALL_FORM;
+extern const wchar_t* IDL_CONFCALL_FORM;
+extern const wchar_t* IDL_DTMF_PANEL;
+extern const wchar_t* IDL_DTMF_KEYS_PANEL;
+extern const wchar_t* IDL_DIALER_KEYPAD_PANEL;
+extern const wchar_t* IDL_FORM_EMERGENCY_DIAL;
+
+//Constants - Call Scene name
+extern const wchar_t* IDSCN_SCENE_OUTCALL;
+extern const wchar_t* IDSCN_SCENE_OUT_EMERGENCYCALL;
+extern const wchar_t* IDSCN_SCENE_INCOMINGCALL;
+extern const wchar_t* IDSCN_SCENE_ACTIVECALL;
+extern const wchar_t* IDSCN_SCENE_ACTIVE_EMERGENCYCALL;
+extern const wchar_t* IDSCN_SCENE_CONFCALL;
+extern const wchar_t* IDSCN_SCENE_CONFCALLLIST;
+extern const wchar_t* IDSCN_SCENE_ENDCALL;
+extern const wchar_t* IDSCN_SCENE_MULTIPLEACTIVECALL;
+//Constants - Settings Scene name
+extern const wchar_t* IDSCN_SCENE_MAIN_SETTING_MENU;
+extern const wchar_t* IDSCN_SCENE_CALL_REJECTLIST_MENU;
+extern const wchar_t* IDSCN_SCENE_CALL_REJECTMSGS_MENU;
+extern const wchar_t* IDSCN_SCENE_SPEED_DIAL;
+extern const wchar_t* IDSCN_SCENE_MORE_OPTIONS;
+extern const wchar_t* IDSCN_SCENE_CALL_STATUSTONES;
+extern const wchar_t* IDSCN_SCENE_CALLTYPE_FORWARD;
+extern const wchar_t* IDSCN_SCENE_CALL_FORWARD_OPTIONS;
+extern const wchar_t* IDSCN_SCENE_CALLTYPE_BARRING;
+extern const wchar_t* IDSCN_SCENE_CALL_BARRING_OPTIONS;
+extern const wchar_t* IDSCN_SCENE_CALL_WAITING_OPTIONS;
+extern const wchar_t* IDSCN_SCENE_ADD_REJECT_NUMBER;
+extern const wchar_t* IDSCN_SCENE_AUTO_AREA_CODE;
+extern const wchar_t* IDSCN_SCENE_ADD_REJECT_MSG;
+extern const wchar_t* IDSCN_SCENE_EDIT_REJECT_MSG;
+extern const wchar_t* IDSCN_SCENE_FORWARD_TO_NUMBER;
+extern const wchar_t* IDSCN_SCENE_NOREPLY_FORWARD_TO_NUMBER;
+extern const wchar_t* IDSCN_SCENE_SET_BARRING_PWD;
+extern const wchar_t* IDSCN_SCENE_DEL_NUMBER;
+extern const wchar_t* IDSCN_SCENE_DEL_MESSAGE;
+//Dialer & Call Log Scene names
+extern const wchar_t* IDSCN_DIALER;
+extern const wchar_t* IDSCN_CALL_LOG;
+extern const wchar_t* IDSCN_CALL_LOG_DETAILS;
+extern const wchar_t* IDSCN_EMERGENCY_DIAL;
+
+extern const wchar_t* TYPE_VIDEO;
+extern const wchar_t* TYPE_VOICE;
+extern const wchar_t* TYPE_SMS;
+extern const wchar_t* TEL;
+extern const wchar_t* TO;
+
+extern const wchar_t* OPERATION_ID_PICK;
+extern const wchar_t* OPERATION_ID_VIEW;
+extern const wchar_t* OPERATION_ID_ADD;
+extern const wchar_t* OPERATION_ID_EDIT;
+extern const wchar_t* OPERATION_ID_CONFIGURE;
+extern const wchar_t* OPERATION_ID_CAPTURE;
+extern const wchar_t* OPERATION_ID_CALL;
+extern const wchar_t* OPERATION_ID_COMPOSE;
+extern const wchar_t* OPERATION_ID_DIAL;
+extern const wchar_t* OPERATION_ID_HOME_MENU;
+
+extern const wchar_t* PROVIDER_ID_CAMERA;
+extern const wchar_t* PROVIDER_ID_GALLERY;
+extern const wchar_t* PROVIDER_ID_CALL;
+extern const wchar_t* PROVIDER_ID_MESSAGE;
+extern const wchar_t* PROVIDER_ID_EMAIL;
+extern const wchar_t* PROVIDER_ID_MEDIA;
+extern const wchar_t* PROVIDER_ID_CONTACTS;
+extern const wchar_t* PROVIDER_ID_PHONE;
+
+extern const wchar_t* RETURN_TYPE_PHONE;
+extern const wchar_t* RETURN_TYPE_EMAIL;
+extern const wchar_t* RETURN_TYPE_CONTACT_ID;
+
+extern const wchar_t* DELIMITER;
+extern const wchar_t* LAUNCHTYPE;
+extern const wchar_t* PARAM_ORIGIN_MT;
+extern const wchar_t* CALL_HANDLE;
+extern const wchar_t* CONTACT_NUMBER;
+extern const wchar_t* PARAM_CALL_TYPE;
+extern const wchar_t* PARAM_CALL_VALUE_VOICE;
+extern const wchar_t* PARAM_PHONE_NUMBER;
+extern const wchar_t* INPUT_TYPE_PHONE;
+extern const wchar_t* MESSAGE_TYPE;
+extern const wchar_t* MESSAGE_SMS_TYPE;
+extern const wchar_t* MESSAGE_TEXT;
+extern const wchar_t* MESSAGE_TO;
+//Contacts app control parameters
+extern const wchar_t* CONTACTS_VIEW_TYPE;
+extern const wchar_t* CONTACTS_VIEW_TYPE_CONTACT;
+extern const wchar_t* CONTACTS_ID_KEY;
+
+extern const wchar_t* SELECTION_MODE;
+extern const wchar_t* RETURN_TYPE;
+extern const wchar_t* SELECTION_MODE_SINGLE;
+extern const wchar_t* RETURN_KEY_VALUE;
+
+//Settings Strings
+extern const wchar_t* SETTINGS_FLIGHT_MODE_STR;
+//Voice Call- Common Command Ids
+enum CommandIds
+{
+       IDA_ADD_CALL = DIAL_CMD_TOTAL_COUNT+1,
+       IDA_JOIN_CALL,
+       IDA_OPEN_CONTACTS,
+       IDA_HOLD_CALL,
+       IDA_UNHOLD_CALL,
+       IDA_MUTE,
+       IDA_UNMUTE,
+       IDA_SPEAKER,
+       IDA_SPEAKER_OFF,
+       IDA_OPEN_NUMKEYPAD,
+       IDA_CLOSE_NUMKEYPAD,
+       IDA_END_CALL,
+       IDA_SHOW_REJECT_CALL_MESSAGE_PANEL, //Show the reject with message panel
+       IDA_CANCEL_REJECT_CALL_MESSAGE_PANEL,//Cancel the reject with message panel
+       IDA_CREATE_REJECT_CALL_MESSAGE,//Reject the call with new message
+       IDA_VOICE_CALL,
+       IDA_VIDEO_CALL,
+       IDA_MESSAGE,
+       IDA_END_CONF_CALL,
+       IDA_HOLD_CONF_CALL,
+       IDA_UNHOLD_CONF_CALL,
+       IDA_ADD_TO_CONTACTS, //add current contact to AddressBook
+       IDA_BACK_EVENT,
+       IDA_SWAP_CALLS,
+       IDA_MORE_OPTIONS_MENU,
+       IDA_MORE_CONF_CALLLIST_OPTION,
+       IDA_SEND_REJECT_MSG1,
+       IDA_SEND_REJECT_MSG2,
+       IDA_SEND_REJECT_MSG3,
+       IDA_SEND_REJECT_MSG4,
+       IDA_SEND_REJECT_MSG5,
+       IDA_SEND_REJECT_MSG6,
+       IDA_CALL_WAITING_OPTION_CHECKED,
+       IDA_CALL_WAITING_OPTION_UNCHECKED,
+       IDA_TOTAL_CMD_IDS,
+};
+
+//Command Ids for Ending Caller in Conference list.
+enum EndConfCallerCmdIds
+{
+       IDA_END_CALLER1 = IDA_TOTAL_CMD_IDS + 1,
+       IDA_END_CALLER2,
+       IDA_END_CALLER3,
+       IDA_END_CALLER4,
+       IDA_END_CALLER5,
+       IDA_TOTAL_ENDCONFCALLER_CMD_IDS,
+};
+
+enum SplitConfCallerCmdIds
+{
+       IDA_SPLIT_CALLER1 = IDA_TOTAL_ENDCONFCALLER_CMD_IDS + 1,
+       IDA_SPLIT_CALLER2,
+       IDA_SPLIT_CALLER3,
+       IDA_SPLIT_CALLER4,
+       IDA_SPLIT_CALLER5,
+       IDA_TOTAL_SPLITCONFCALLER_CMD_IDS,
+};
+
+enum CallAnsweringOptions
+{
+       ANSERWING_OPTION_HOLD_SINGLE_CALL = 503,//Hold previous call and accept incoming call.
+       ANSERWING_OPTION_END_SINGLE_CALL,//End previous call and accept incoming call.
+       ANSERWING_OPTION_REPLACE_ACTIVE_CALL,//Replace previous active call with incoming call.
+       ANSERWING_OPTION_REPLACE_HELD_CALL,//Replace previous held call with incoming call.
+       ANSERWING_OPTION_END_ALL_CALLS,//end all previous calls and accept incoming.
+       ANSERWING_OPTION_ACCEPT_CALL,//no previous active calls present
+};
+
+enum SoundMode
+{
+       SOUND_MODE_VOICE = 0,
+       SOUND_MODE_RINGTONE,
+       SOUND_MODE_MEDIA
+};
+
+//Type of the call (incoming, outgoing etc for call log database
+enum CallLogType
+{
+       CALL_LOG_TYPE_VOICE_INCOMING,
+       CALL_LOG_TYPE_VOICE_OUTGOING,
+       CALL_LOG_TYPE_VOICE_MISSED,
+       CALL_LOG_TYPE_VOICE_REJECTED,
+       CALL_LOG_TYPE_VOICE_BLOCKED,
+       CALL_LOG_TYPE_SMS_INCOMING,
+       CALL_LOG_TYPE_SMS_OUTGOING,
+};
+
+//Error code to handle error scenarios
+enum ErrorCodes
+{
+       ERROR_NONE,
+       ERROR_INVALID_INPUT,
+       ERROR_DIAL_FAILED,
+       ERROR_INVALID_NUMBER,
+       ERROR_REJECT_FAILED,
+       ERROR_JOIN_FAILED,
+       ERROR_SWAP_FAILED,
+       ERROR_END_CALL_FAILED,
+       ERROR_END_FROM_CONFERENCE_FAILED,
+       ERROR_SPLIT_FROM_CONFERENCE_FAILED,
+       ERROR_CODE_SIM_INITIALIZATION_FAILED,
+       ERROR_NOT_EMERGENCY_NUM,
+       ERROR_TAPI_INIT_FAILED,
+       ERROR_TAPI_ERROR,
+       ERROR_BARRING_PWD_TOO_LONG,
+       ERROR_FLIGHT_MODE_SET,
+       ERROR_GENERAL,
+};
+
+enum DialerRequestType
+{
+       REQUEST_SHOW_SUGGESTION,
+       REQUEST_SHOW_ADD_TO_CONTACTS,
+       REQUEST_SHOW_SPEED_DIAL_POPUP,
+       REQUEST_CALL_SPEED_DIAL_NUM,
+};
+
+enum IncomingCallFormRequestType
+{
+       REQUEST_ITEM_SELECTED,
+};
+
+
+//Dimensions for Small photo of caller/callee.
+extern const int W_SMALL_PHOTO;
+extern const int H_SMALL_PHOTO;
+extern const int W_CONFERENCE_PHOTO;
+extern const int H_CONFERENCE_PHOTO;
+extern const int W_CALL_THUMBNAIL;
+extern const int H_CALL_THUMBNAIL;
+extern const int W_CALL_THUMBNAIL_SHADOW;
+extern const int H_CALL_THUMBNAIL_SHADOW;
+
+//Maximum number of calls
+extern const int IDI_MAX_ACTIVE_CALLS;
+extern const int IDI_MAX_CONF_CALL_PARTICIPANTS;
+//Constants used for custom list item in message panel in Incoming call screen
+extern const int IDA_FORMAT_SENDTEXT;
+extern const int IDA_BUTTON_CANCEL_OPTIONS_POPUP;
+extern const int ID_MULTI_PARTY_CALL;
+extern const int ID_SECOND_INCOMING_CALL;
+//Constants
+extern const wchar_t* IDI_KEY2_TXT;
+extern const wchar_t* IDI_KEY3_TXT;
+extern const wchar_t* IDI_KEY4_TXT;
+extern const wchar_t* IDI_KEY5_TXT;
+extern const wchar_t* IDI_KEY6_TXT;
+extern const wchar_t* IDI_KEY7_TXT;
+extern const wchar_t* IDI_KEY8_TXT;
+extern const wchar_t* IDI_KEY9_TXT;
+
+#endif /* PHNTYPES_H_ */
diff --git a/inc/CalllogManager.h b/inc/CalllogManager.h
new file mode 100644 (file)
index 0000000..f565584
--- /dev/null
@@ -0,0 +1,132 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file               CalllogManager.h
+ * @brief              This is the header file for the %CallLogManager class.
+ *
+ * This header file contains the declarations for %CallLogManager, %CallLogDetails, %LogListComparer class.
+ */
+
+#ifndef _PHN_CALL_LOG_MANAGER_H_
+#define _PHN_CALL_LOG_MANAGER_H_
+#include "contacts.h"
+#include <FBase.h>
+#include "CallInfo.h"
+#include "CallTypes.h"
+#include "CallICalllogChangeListener.h"
+
+class CallLogDetails;
+
+/**
+ * @class LogListComparer
+ * @brief LogListComparer provides comparison functions used to
+ * sort an arraylist of CallLogDetails.
+ *
+ */
+class LogListComparer
+: public Tizen::Base::Collection::IComparerT<CallLogDetails>
+{
+public:
+       LogListComparer() {};
+       virtual ~LogListComparer() {};
+       result Compare (const CallLogDetails& obj1, const CallLogDetails& obj2, int& cmp) const;
+};
+
+/**
+ * @class CallLogDetails
+ * @brief CallLogDetails used to store information call logs.
+ *
+ */
+class CallLogDetails
+: public Tizen::Base::Object
+{
+public:
+       CallLogDetails();
+       virtual ~CallLogDetails();
+       bool operator ==(const CallLogDetails& rhs) const;
+       bool operator !=(const CallLogDetails& rhs) const;
+       CallLogDetails& operator =(const CallLogDetails& rhs);
+
+       void SetCalllogDbId(int id);
+       int GetCalllogDbId(void);
+       void SetCalllogType(contacts_phone_log_type_e type);
+       CallLogType GetCalllogType(void);
+       void SetContactDbId(int id);
+       int GetContactDbId(void);
+       void SetFirstName(char* name);
+       char*   GetFirstName(void);
+       void SetLastName(char* name);
+       char*   GetLastName(void);
+       void SetDisplayName(char* name);
+       char*   GetDisplayName(void);
+       void SetContactImagePath(char* path);
+       char* GetContactImagePath(void);
+       void SetPhoneNumber(char* number);
+       char* GetPhoneNumber(void);
+       void SetShortMessage(char* message);
+       char* GetShortMessage(void);
+       void SetStartTime(time_t time);
+       time_t GetStartTime(void);
+       void SetDuration(int duration);
+       int GetDuration(void);
+       void ConvertTimetoDateTime(void);
+       Tizen::Base::DateTime GetDateTime(void);
+
+private:
+       //TODO: Naming conventions to be followed.
+       //NOTE: Below fields are not owned.
+       int                     calllog_db_id;             /**< Call log entry id */
+       CallLogType                     calllog_type;           /**< Call log entry type */
+       int                     contact_db_id;          /**< Contact's id in database */
+       char*                   first_name;         /**< Contact's first name (also known as given name) */
+       char*                   last_name;          /**< Contact's last name (also known as family name) */
+       char*                   display_name;       /**< Display name (how contact's name should be presented) */
+       char*                   contact_image_path;  /**< Path to image with contact's picture */
+  //  contact_number_type_e   phone_number_type;  /**< Phone number type (i.e.: work, cell) */
+       char*                   phone_number;       /**< Phone number */
+       char*                   short_message;      /**< Short message for this log */
+       time_t                  startTime;          /**< Timestamp of this change */
+       int                     duration_sec;
+       Tizen::Base::DateTime           dateTime;
+
+};
+
+/**
+ * @class CallLogManager
+ * @brief CallLogManager is a singleton class used to save and retrieve call log related data.
+ *
+ */
+class CallLogManager
+{
+public:
+       static CallLogManager* GetInstance(void);
+
+private:
+       CallLogManager(void);
+       virtual ~CallLogManager(void);
+       result Construct(void);
+       static void CreateInstance(void);
+       static void DestroyInstance(void);
+       unsigned long GetDuration(long long start_time);
+public:
+       result AddCallogInfoToDatabase(CallInfo* calllogInfo);
+private:
+       static CallLogManager*                                                                                  __pCallogManager;
+};
+
+
+#endif // _PHN_CALL_LOG_MANAGER_H_
diff --git a/lib/nofile.dummy b/lib/nofile.dummy
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/manifest.xml b/manifest.xml
new file mode 100644 (file)
index 0000000..8278c48
--- /dev/null
@@ -0,0 +1,37 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<Manifest xmlns="http://schemas.tizen.org/2012/12/manifest">
+    <Id>nI2PLNdTwi</Id>
+    <Version>1.0.0</Version>
+    <Type>C++App</Type>
+    <Requirements>
+        <Feature Name="http://tizen.org/feature/platform.core.cpu.arch.x86">true</Feature>
+        <Feature Name="http://tizen.org/feature/platform.core.fpu.arch.vfpv3">true</Feature>
+    </Requirements>
+    <Apps>
+        <ApiVersion>2.0</ApiVersion>
+        <Privileges>
+            <Privilege>http://tizen.org/privilege/application.launch</Privilege>
+            <Privilege>http://tizen.org/privilege/setting</Privilege>
+            <Privilege>http://tizen.org/privilege/messaging.sms</Privilege>
+            <Privilege>http://tizen.org/privilege/vibrator</Privilege>
+            <Privilege>http://tizen.org/privilege/contact.read</Privilege>
+        </Privileges>
+        <UiApp Main="True" MenuIconVisible="False" Name="Call">
+            <UiScalability BaseScreenSize="Normal" CoordinateSystem="Logical" LogicalCoordinate="720"/>
+            <UiTheme SystemTheme="White"/>
+            <DisplayNames>
+                <DisplayName Locale="eng-GB">CallApp</DisplayName>
+            </DisplayNames>
+            <Icons>
+                <Icon Section="MainMenu">mainmenu.png</Icon>
+            </Icons>
+            <AppControls>
+                <AppControl>
+                    <Operation>http://tizen.org/appcontrol/operation/call</Operation>
+                    <Uri>tel</Uri>
+                </AppControl>
+            </AppControls>
+            <LaunchConditions/>
+        </UiApp>
+    </Apps>
+</Manifest>
diff --git a/packaging/apps.Call.spec b/packaging/apps.Call.spec
new file mode 100644 (file)
index 0000000..9f37ede
--- /dev/null
@@ -0,0 +1,68 @@
+Name:       apps.Call
+Summary:    Call application
+Version:    1.0.0.0
+Release:    1
+Group:      TO_BE/FILLED_IN
+License:    TO BE FILLED IN
+Source0:    %{name}-%{version}.tar.gz
+BuildRequires:  cmake
+BuildRequires:  pkgconfig(osp-appfw)
+BuildRequires:  pkgconfig(osp-uifw)
+BuildRequires:  pkgconfig(osp-social)
+BuildRequires:  pkgconfig(osp-messaging)
+BuildRequires:  pkgconfig(osp-media)
+BuildRequires:  pkgconfig(osp-image)
+BuildRequires:  pkgconfig(osp-image-core)
+BuildRequires:  pkgconfig(osp-shell)
+BuildRequires:  pkgconfig(osp-telephony)
+BuildRequires:  pkgconfig(glib-2.0)
+BuildRequires:  pkgconfig(capi-media-sound-manager)
+BuildRequires:  pkgconfig(vconf)
+BuildRequires:  pkgconfig(tapi)
+BuildRequires:  pkgconfig(mm-sound)
+BuildRequires:  pkgconfig(contacts-service2)
+BuildRequires:  osp-appfw-internal-devel
+BuildRequires:  osp-uifw-internal-devel
+BuildRequires:  osp-media-internal-devel
+
+ # runtime requires
+Requires: osp-installer
+
+%description
+Verification application: Call
+
+%prep
+%setup -q
+
+%build
+MAJORVER=`echo %{version} | awk 'BEGIN {FS="."}{print $1}'`
+%ifarch %{ix86}
+CXXFLAGS="$CXXFLAGS -D_OSP_DEBUG_ -D_OSP_X86_ -D_OSP_EMUL_" cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DFULLVER=%{version} -DMAJORVER=${MAJORVER}
+%else
+CXXFLAGS="$CXXFLAGS -D_OSP_DEBUG_ -D_OSP_ARMEL_" cmake . -DCMAKE_INSTALL_PREFIX=%{_prefix} -DFULLVER=%{version} -DMAJORVER=${MAJORVER}
+%endif
+
+# Call make instruction with smp support
+make %{?jobs:-j%jobs}
+
+%install
+rm -rf %{buildroot}
+%make_install
+
+%post
+/sbin/ldconfig
+PKG_ID=zktdpemtmw
+echo "/usr/etc/package-manager/backend/tpk -i /usr/apps/"${PKG_ID}
+/usr/etc/package-manager/backend/tpk -i /usr/apps/${PKG_ID}
+cp -f /usr/lib/osp/osp-ui-app-loader /usr/apps/${PKG_ID}/bin/Call
+/usr/bin/vconftool set -t int memory/call/state "0" -g 6521 -i -f
+
+%postun
+/sbin/ldconfig
+PKG_ID=zktdpemtmw
+echo "/usr/etc/package-manager/backend/tpk -u "${PKG_ID}
+/usr/etc/package-manager/backend/tpk -u ${PKG_ID}
+
+%files
+%defattr(-,root,root,-)
+/usr/apps/*
diff --git a/res/eng-GB.xml b/res/eng-GB.xml
new file mode 100644 (file)
index 0000000..1bd4308
--- /dev/null
@@ -0,0 +1,178 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<string_table Bversion="2.0.0.201302151552" Dversion="20120315">
+    <text id="IDS_SETTING_VOICEFORWARD_NOREPLY_STRING">If no reply</text>
+    <text id="IDS_SETTING_CALLERID_SUB_STRING">Show</text>
+    <text id="IDS_SETTING_CONNECTTONE_STRING">Call connect tone</text>
+    <text id="IDS_CALLLOG_DELETE_FOOTER">Delete</text>
+    <text id="IDS_DIALER_MENU_ITEM_EXIT">Exit</text>
+    <text id="IDS_SETTING_CONNECTTONE_HLP_STRING">There will be a signal sound when the line is connected</text>
+    <text id="IDS_SETTING_MORE_SUB_STRING">Call waiting, Call barring, Prefix...</text>
+    <text id="IDS_KEYPAD_BTN_NAME">Keypad</text>
+    <text id="IDS_SETTINGS_MATCHCRITERIA_STRING">Match criteria</text>
+    <text id="IDS_DATETIME_SEP">Sep</text>
+    <text id="IDS_MUTE_BTN_NAME">Mute</text>
+    <text id="IDS_SETTING_REJECT_HLP_STRING">Manage auto reject mode</text>
+    <text id="IDS_SETTING_VOICEBARRING_INTERNATIONAL_STRING">Int'l calls</text>
+    <text id="IDS_SETTING_DONE_HEADER_ITEM">Done</text>
+    <text id="IDS_NO_MESSAGE_STR">No Messages</text>
+    <text id="IDS_SETTING_WAIT_INTERVAL_STRING">seconds</text>
+    <text id="IDS_CALLERID_HIDE_STRING">Hide</text>
+    <text id="IDS_NO_LOGS">No Logs</text>
+    <text id="IDS_ADDCALL_BTN_NAME">Add call</text>
+    <text id="IDS_DIALER_MENU_ITEM_ADD_WAIT">Add Wait</text>
+    <text id="IDS_SPEEDDIAL_POP_YES_BTN_STRING">Yes</text>
+    <text id="IDS_MESSAGES_SELECTED">%d Messages Selected</text>
+    <text id="IDS_SETTING_CALLTYPE_VOICE_STRING">Voice call</text>
+    <text id="IDS_SETTING_REMINDERS_STRING">Minute reminders</text>
+    <text id="IDS_SETTINGS_DELETE_MSGS_TITLE_STRING">Set reject messages</text>
+    <text id="IDS_DEFAULT_SPEED_DIAL_TEXT">.Name</text>
+    <text id="IDS_ALREADY_USED_MSG">already in use</text>
+    <text id="IDS_SETTING_ENDTONE_HLP_STRING">There will be a signal sound when the line is disconnected</text>
+    <text id="IDS_SETTING_WAITING_HLP_STRING">During call, notify me of incoming calls</text>
+    <text id="IDS_SETTING_REJECT_MSG_STRING">Set reject messages</text>
+    <text id="IDS_ENDCALL_BTN_NAME">End call</text>
+    <text id="IDS_SETTING_VOICEFORWARD_IFBUSY_STRING">If busy</text>
+    <text id="IDS_REMOVE_CONTACT">Remove</text>
+    <text id="IDS_CANCEL">Cancel</text>
+    <text id="IDS_MATCHCRITERIA_INCLUDE_STRING">Includes</text>
+    <text id="IDS_TIMER_ON_HOLD">On Hold</text>
+    <text id="IDS_SETTING_FORWARDING_STRING">Call forwarding</text>
+    <text id="IDS_SETTING_AUTO_AREACODE_STRING">Auto area code</text>
+    <text id="IDS_INVALID_NUMBER_ERROR_MSG">Invalid Number.</text>
+    <text id="IDS_CALLLOG_REJECTED">Rejected Call</text>
+    <text id="IDS_PEOPLE_STR">people</text>
+    <text id="IDS_DIALER_MENU_ITEM_ADD_CONTACT">Add Contact</text>
+    <text id="IDS_SETTING_CALLALERT_OFF_STRING">Off</text>
+    <text id="IDS_DIALER_MENU_ITEM_SPEED_DIAL">Speed Dial</text>
+    <text id="IDS_CONTACT_BTN_NAME">Contact</text>
+    <text id="IDS_DATETIME_OCT">Oct</text>
+    <text id="IDS_AM_TIME">AM</text>
+    <text id="IDS_MATCHCRITERIA_END_STRING">Ends with</text>
+    <text id="IDS_SPEED_DIAL_TITLE">SPEED DIAL</text>
+    <text id="IDS_CALLLOG_CANCEL_FOOTER">Cancel</text>
+    <text id="IDS_CHANGE_CONTACT">Change contact</text>
+    <text id="IDS_SELECTED_ITEMS_STRING">%d call logs selected</text>
+    <text id="IDS_CALLLOG_NO_NUMBER">No Number</text>
+    <text id="IDS_SETTING_SAVE_HEADER_ITEM">Save</text>
+    <text id="IDS_SETTING_REJECT_STRING">Call rejection</text>
+    <text id="IDS_NUMBER_SELECTED">%d Number Selected</text>
+    <text id="IDS_SETTING_AUTO_AREACODE_HLP_STRING">Add the area code on the dialer by default</text>
+    <text id="IDS_CALLLOG_NO_NAME">No Name</text>
+    <text id="IDS_LONG_BARRING_PWD_ERROR_MSG">Barring Password length should be less than or equal to 4.</text>
+    <text id="IDS_DATETIME_APR">Apr</text>
+    <text id="IDS_SETTING_SPEEDDIAL_STRING">Speed dial</text>
+    <text id="IDS_JOINCALL_BTN_NAME">Join call</text>
+    <text id="IDS_DATETIME_JUN">Jun</text>
+    <text id="IDS_DATETIME_JUL">Jul</text>
+    <text id="IDS_DIALER_MOBILE_STR">Mobile</text>
+    <text id="IDS_SETTING_WAITING_TIME_STRING">Waiting time</text>
+    <text id="IDS_SETTING_WAITING_STRING">Call waiting</text>
+    <text id="IDS_SETTING_VOICEFORWARD_OUTOFREACH_STRING">If out of reach</text>
+    <text id="IDS_SETTING_VOICEBARRING_WHENROAMING_STRING">Incoming when roaming</text>
+    <text id="IDS_TAPI_INIT_ERROR_MSG">TAPI Server initialization failed.</text>
+    <text id="IDS_ADD_BTN_STRING">Add</text>
+    <text id="IDS_MSG_BTN_NAME">Message</text>
+    <text id="IDS_SETTING_VOICEFORWARD_OPTIONS_TITLE_STRING">Voice Call forwarding</text>
+    <text id="IDS_DATETIME_MAY">May</text>
+    <text id="IDS_SPEED_DIAL_POPUP_TITLE">Edit</text>
+    <text id="IDS_SETTING_CALLERID_MAIN_STRING">Show my caller ID</text>
+    <text id="IDS_DATETIME_MAR">Mar</text>
+    <text id="IDS_CALLLOG_RECEIVED_MSG">Received Message</text>
+    <text id="IDS_SETTING_CALL_ALERT_MAIN_STRING">Alerts on call</text>
+    <text id="IDS_ADD_TO_CONTACTS">Add To Contacts</text>
+    <text id="IDS_SPEED_DIAL_DELETE_TITLE">SELECT SPEED DIAL</text>
+    <text id="IDS_DIALER_MENU_ITEM_SEND_MSG">Send Message</text>
+    <text id="IDS_MATCHCRITERIA_EXACT_STRING">Exactly the same as</text>
+    <text id="IDS_HOLD_BTN_NAME">Hold</text>
+    <text id="IDS_CALL_OPTION_TITLE">Accept call after</text>
+    <text id="IDS_CALLLOG_OUTGOING">Outgoing Call</text>
+    <text id="IDS_SETTING_WAITING_OPTIONS_TITLE_STRING">Call waiting</text>
+    <text id="IDS_GENERAL_TAPI_ERROR_MSG">TAPI Error occurred.</text>
+    <text id="IDS_SETTING_STATUS_TONES_STRING">Call status tones</text>
+    <text id="IDS_EMERGENCY_CALLS_ONLY_ERROR_MSG">Emergency Calls Only.</text>
+    <text id="IDS_CALL_OPTION8">Putting held calls(%d) on hold</text>
+    <text id="IDS_CALL_OPTION7">Putting active calls(%d) on hold</text>
+    <text id="IDS_CALL_OPTION6">Ending all calls</text>
+    <text id="IDS_DEFAULT_REJECT_ITEM_STRING">Unknown</text>
+    <text id="IDS_CALL_OPTION5">Ending call </text>
+    <text id="IDS_CALL_OPTION4">Ending active calls(%d)</text>
+    <text id="IDS_SPLIT_PARTICIPANT_ERROR_MSG">Split From Conference Failed.</text>
+    <text id="IDS_CALL_OPTION3">Ending held calls(%d)</text>
+    <text id="IDS_CALL_OPTION2">Ending call with </text>
+    <text id="IDS_CALL_OPTION1">Putting %ls on hold</text>
+    <text id="IDS_SETTING_FORWARD_CALLTYPE_TITLE_STRING">Call forwarding</text>
+    <text id="IDS_NUMBERS_SELECTED">%d Numbers Selected</text>
+    <text id="IDS_INCOMING_CALLING">Calling...</text>
+    <text id="IDS_VIEW_CONTACT">View Contact</text>
+    <text id="IDS_UNHOLD_BTN_NAME">Unhold</text>
+    <text id="IDS_FLIGHT_MODE_ON">Please Disable Filght Mode to Call</text>
+    <text id="IDS_DIALER_MENU_ITEM_ADD_PAUSE">Add Pause</text>
+    <text id="IDS_SETTING_CALL_WAITING_OPTIONS_STRING">Call waiting</text>
+    <text id="IDS_SELECT_ALL_LIST_ITEM_STRING">Select all</text>
+    <text id="IDS_SETTING_ENDTONE_STRING">Call end tone</text>
+    <text id="IDS_SETTING_CALLALERT_SOUND_STRING">Sound</text>
+    <text id="IDS_SETTING_BARRING_CALLTYPE_TITLE_STRING">Call barring</text>
+    <text id="IDS_SETTING_VOICEBARRING_INCOMING_STRING">All incoming calls</text>
+    <text id="IDS_SETTINGS_DELETE_NUMBER_TITLE_STRING">Select number</text>
+    <text id="IDS_MESSAGE_SELECTED">%d Message Selected</text>
+    <text id="IDS_NOT_ASSIGNED_STR">Not assigned</text>
+    <text id="IDS_MATCHCRITERIA_START_STRING">Start with</text>
+    <text id="IDS_VOICE_CALL_BTN_NAME">Voice call</text>
+    <text id="IDS_INVALID_ARGS_ERROR_MSG">Invalid Parameters Passed.</text>
+    <text id="IDS_SETTING_STATUS_TONES_HLP_STRING">Edit alerts that sound during calls</text>
+    <text id="IDS_SETTING_VOICEBARRING_EXCEPTHOME_STRING">Int'l calls except home</text>
+    <text id="IDS_CONFERENCE_CALL_STRING">Conference call</text>
+    <text id="IDS_SPEAKER_BTN_NAME">Speaker</text>
+    <text id="IDS_DELETE_BTN_STRING">Delete</text>
+    <text id="IDS_SPEEDDIAL_POP_NO_BTN_STRING">No</text>
+    <text id="IDS_SELECT_CALL_LOG">Select Call log</text>
+    <text id="IDS_CALLLOG_MISSED">Missed Call</text>
+    <text id="IDS_CALLLOG_RECEIVED">Received Call</text>
+    <text id="IDS_INVALID_NUMBER">Invalid Number</text>
+    <text id="IDS_DATETIME_FEB">Feb</text>
+    <text id="IDS_REJECT_MESSAGE_CREATE">Create</text>
+    <text id="IDS_DATETIME_DEC">Dec</text>
+    <text id="IDS_SELECT_NUMBER">Select Number</text>
+    <text id="IDS_SIM_INIT_ERROR_MSG">Sim initialization is failed or not completed.</text>
+    <text id="IDS_SELECT_MESSAGE">Select Message</text>
+    <text id="IDS_SETTING_BARRING_STRING">Call barring</text>
+    <text id="IDS_DATETIME_NOV">Nov</text>
+    <text id="IDS_SETTING_CALL_ALERT_SUB_STRING">Sound</text>
+    <text id="IDS_SETTING_CALLALERT_VIBRATE_STRING">Vibration</text>
+    <text id="IDS_REJECT_MESSAGE_BTN">Reject With Message</text>
+    <text id="IDS_CANCEL_BTN_STRING">Cancel</text>
+    <text id="IDS_SETTING_VOICEBARRING_OUTGOING_STRING">All outgoing calls</text>
+    <text id="IDS_SETTING_CALLTYPE_VIDEO_STRING">Video call</text>
+    <text id="IDS_MGR_CONF_CALL_LIST_STR">Manage conference call</text>
+    <text id="IDS_CALLLOG_SENT_MSG">Sent Message</text>
+    <text id="IDS_SETTINGS_ENTERNUMBER_STRING">Enter number</text>
+    <text id="IDS_DIALER_SPEEDDIAL_POPUP_MSG">No Speed dial assigned.\n Assign now?</text>
+    <text id="IDS_LOGS_YESTERDAY">Yesterday</text>
+    <text id="IDS_CALLERID_BYNETWORK_STRING">By network</text>
+    <text id="IDS_CLOSE_POPUP">Close</text>
+    <text id="IDS_LIST_SEND_BUTTON">Send</text>
+    <text id="IDS_EMERGENCY_CALL">EMERGENCY CALL</text>
+    <text id="IDS_PM_TIME">PM</text>
+    <text id="IDS_CALLERID_SHOW_STRING">Show</text>
+    <text id="IDS_DIAL_ERROR_MSG">Call not allowed.</text>
+    <text id="IDS_SETTING_REJECT_MSG_HLP_STRING">Edit reject messages</text>
+    <text id="IDS_GENERAL_ERROR_MSG">General Error.</text>
+    <text id="IDS_SETTING_MORE_MAIN_STRING">More call settings</text>
+    <text id="IDS_SETTING_VOICEBARRING_OPTIONS_TITLE_STRING">Voice call barring</text>
+    <text id="IDS_REJECT_FAILED_ERROR_MSG">Reject Failed.</text>
+    <text id="IDS_SETTING_VOICEFORWARD_ALWAYS_STRING">Always</text>
+    <text id="IDS_SETTING_REMINDERS_HLP_STRING">There will be signal sounds every minute</text>
+    <text id="IDS_VIDEO_CALL_BTN_NAME">Video call</text>
+    <text id="IDS_CALL_SWAP_ERROR_MSG">Swap Failed.</text>
+    <text id="IDS_SETTING_DEACTIVATE_STATUS_STRING">Deactivated</text>
+    <text id="IDS_END_PARTICIPANT_ERROR_MSG">End From Conference failed.</text>
+    <text id="IDS_JOIN_FAILED_ERROR_MSG">Join Failed.</text>
+    <text id="IDS_DATETIME_AUG">Aug</text>
+    <text id="IDS_LOGS_TODAY">Today</text>
+    <text id="IDS_DATETIME_JAN">Jan</text>
+    <text id="IDS_SELECTED_ITEM_STRING">%d call log selected</text>
+    <text id="IDS_NUMBER_UNKNOWN">Unknown</text>
+</string_table>
diff --git a/res/screen-density-xhigh/00_Nocontents_text.png b/res/screen-density-xhigh/00_Nocontents_text.png
new file mode 100644 (file)
index 0000000..55b7329
Binary files /dev/null and b/res/screen-density-xhigh/00_Nocontents_text.png differ
diff --git a/res/screen-density-xhigh/00_button_01_normal.png b/res/screen-density-xhigh/00_button_01_normal.png
new file mode 100644 (file)
index 0000000..76865ec
Binary files /dev/null and b/res/screen-density-xhigh/00_button_01_normal.png differ
diff --git a/res/screen-density-xhigh/00_button_04_dim.png b/res/screen-density-xhigh/00_button_04_dim.png
new file mode 100644 (file)
index 0000000..76865ec
Binary files /dev/null and b/res/screen-density-xhigh/00_button_04_dim.png differ
diff --git a/res/screen-density-xhigh/00_button_04_normal.png b/res/screen-density-xhigh/00_button_04_normal.png
new file mode 100644 (file)
index 0000000..76865ec
Binary files /dev/null and b/res/screen-density-xhigh/00_button_04_normal.png differ
diff --git a/res/screen-density-xhigh/00_button_04_normal_focus.png b/res/screen-density-xhigh/00_button_04_normal_focus.png
new file mode 100644 (file)
index 0000000..06c39d8
Binary files /dev/null and b/res/screen-density-xhigh/00_button_04_normal_focus.png differ
diff --git a/res/screen-density-xhigh/00_button_06_normal.9.png b/res/screen-density-xhigh/00_button_06_normal.9.png
new file mode 100644 (file)
index 0000000..355f50d
Binary files /dev/null and b/res/screen-density-xhigh/00_button_06_normal.9.png differ
diff --git a/res/screen-density-xhigh/00_button_06_press.9.png b/res/screen-density-xhigh/00_button_06_press.9.png
new file mode 100644 (file)
index 0000000..2bae489
Binary files /dev/null and b/res/screen-density-xhigh/00_button_06_press.9.png differ
diff --git a/res/screen-density-xhigh/00_button_cancel_normal.png b/res/screen-density-xhigh/00_button_cancel_normal.png
new file mode 100644 (file)
index 0000000..f8eaf80
Binary files /dev/null and b/res/screen-density-xhigh/00_button_cancel_normal.png differ
diff --git a/res/screen-density-xhigh/00_button_cancel_press.png b/res/screen-density-xhigh/00_button_cancel_press.png
new file mode 100644 (file)
index 0000000..f8eaf80
Binary files /dev/null and b/res/screen-density-xhigh/00_button_cancel_press.png differ
diff --git a/res/screen-density-xhigh/00_button_normal_bg.9.png b/res/screen-density-xhigh/00_button_normal_bg.9.png
new file mode 100644 (file)
index 0000000..325b542
Binary files /dev/null and b/res/screen-density-xhigh/00_button_normal_bg.9.png differ
diff --git a/res/screen-density-xhigh/00_icon_Back.png b/res/screen-density-xhigh/00_icon_Back.png
new file mode 100644 (file)
index 0000000..e217a0a
Binary files /dev/null and b/res/screen-density-xhigh/00_icon_Back.png differ
diff --git a/res/screen-density-xhigh/00_icon_Back_press.png b/res/screen-density-xhigh/00_icon_Back_press.png
new file mode 100644 (file)
index 0000000..344e209
Binary files /dev/null and b/res/screen-density-xhigh/00_icon_Back_press.png differ
diff --git a/res/screen-density-xhigh/00_index list_bg.png b/res/screen-density-xhigh/00_index list_bg.png
new file mode 100644 (file)
index 0000000..f41ec7c
Binary files /dev/null and b/res/screen-density-xhigh/00_index list_bg.png differ
diff --git a/res/screen-density-xhigh/00_indexlist_icon_opened.png b/res/screen-density-xhigh/00_indexlist_icon_opened.png
new file mode 100644 (file)
index 0000000..4a07f55
Binary files /dev/null and b/res/screen-density-xhigh/00_indexlist_icon_opened.png differ
diff --git a/res/screen-density-xhigh/00_list_expand_closed.png b/res/screen-density-xhigh/00_list_expand_closed.png
new file mode 100644 (file)
index 0000000..a3f639e
Binary files /dev/null and b/res/screen-density-xhigh/00_list_expand_closed.png differ
diff --git a/res/screen-density-xhigh/00_list_expand_closed_press.png b/res/screen-density-xhigh/00_list_expand_closed_press.png
new file mode 100644 (file)
index 0000000..b421ad1
Binary files /dev/null and b/res/screen-density-xhigh/00_list_expand_closed_press.png differ
diff --git a/res/screen-density-xhigh/00_list_expand_opened.png b/res/screen-density-xhigh/00_list_expand_opened.png
new file mode 100644 (file)
index 0000000..377dbc9
Binary files /dev/null and b/res/screen-density-xhigh/00_list_expand_opened.png differ
diff --git a/res/screen-density-xhigh/00_list_expand_opened_press.png b/res/screen-density-xhigh/00_list_expand_opened_press.png
new file mode 100644 (file)
index 0000000..1b49c94
Binary files /dev/null and b/res/screen-density-xhigh/00_list_expand_opened_press.png differ
diff --git a/res/screen-density-xhigh/00_popup_bg_ef.9.png b/res/screen-density-xhigh/00_popup_bg_ef.9.png
new file mode 100644 (file)
index 0000000..f19a0ab
Binary files /dev/null and b/res/screen-density-xhigh/00_popup_bg_ef.9.png differ
diff --git a/res/screen-density-xhigh/00_popup_bubble_tail_bottom.png b/res/screen-density-xhigh/00_popup_bubble_tail_bottom.png
new file mode 100644 (file)
index 0000000..85ad926
Binary files /dev/null and b/res/screen-density-xhigh/00_popup_bubble_tail_bottom.png differ
diff --git a/res/screen-density-xhigh/00_popup_bubble_tail_top.png b/res/screen-density-xhigh/00_popup_bubble_tail_top.png
new file mode 100644 (file)
index 0000000..f7db3a2
Binary files /dev/null and b/res/screen-density-xhigh/00_popup_bubble_tail_top.png differ
diff --git a/res/screen-density-xhigh/00_reorder_group_list_bg.png b/res/screen-density-xhigh/00_reorder_group_list_bg.png
new file mode 100644 (file)
index 0000000..9e57e51
Binary files /dev/null and b/res/screen-density-xhigh/00_reorder_group_list_bg.png differ
diff --git a/res/screen-density-xhigh/00_volume_icon_Mute.png b/res/screen-density-xhigh/00_volume_icon_Mute.png
new file mode 100644 (file)
index 0000000..bb970b9
Binary files /dev/null and b/res/screen-density-xhigh/00_volume_icon_Mute.png differ
diff --git a/res/screen-density-xhigh/00_winset_Back.png b/res/screen-density-xhigh/00_winset_Back.png
new file mode 100644 (file)
index 0000000..6db2192
Binary files /dev/null and b/res/screen-density-xhigh/00_winset_Back.png differ
diff --git a/res/screen-density-xhigh/00_winset_more.png b/res/screen-density-xhigh/00_winset_more.png
new file mode 100644 (file)
index 0000000..473d5aa
Binary files /dev/null and b/res/screen-density-xhigh/00_winset_more.png differ
diff --git a/res/screen-density-xhigh/00_winset_more_press.png b/res/screen-density-xhigh/00_winset_more_press.png
new file mode 100644 (file)
index 0000000..cc82721
Binary files /dev/null and b/res/screen-density-xhigh/00_winset_more_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_Back_btn_normal.png b/res/screen-density-xhigh/C01-1_Back_btn_normal.png
new file mode 100644 (file)
index 0000000..a744418
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_Back_btn_normal.png differ
diff --git a/res/screen-density-xhigh/C01-1_Back_btn_press.png b/res/screen-density-xhigh/C01-1_Back_btn_press.png
new file mode 100644 (file)
index 0000000..1f4867e
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_Back_btn_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_Incoming call_BG_01.png b/res/screen-density-xhigh/C01-1_Incoming call_BG_01.png
new file mode 100644 (file)
index 0000000..c8cdd2d
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_Incoming call_BG_01.png differ
diff --git a/res/screen-density-xhigh/C01-1_Not saved contact BG.png b/res/screen-density-xhigh/C01-1_Not saved contact BG.png
new file mode 100644 (file)
index 0000000..b37b3ab
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_Not saved contact BG.png differ
diff --git a/res/screen-density-xhigh/C01-1_Reject_message_arrow_01.png b/res/screen-density-xhigh/C01-1_Reject_message_arrow_01.png
new file mode 100644 (file)
index 0000000..5a0023e
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_Reject_message_arrow_01.png differ
diff --git a/res/screen-density-xhigh/C01-1_Reject_message_arrow_02.png b/res/screen-density-xhigh/C01-1_Reject_message_arrow_02.png
new file mode 100644 (file)
index 0000000..32e76be
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_Reject_message_arrow_02.png differ
diff --git a/res/screen-density-xhigh/C01-1_Reject_message_bg.png b/res/screen-density-xhigh/C01-1_Reject_message_bg.png
new file mode 100644 (file)
index 0000000..a5668ad
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_Reject_message_bg.png differ
diff --git a/res/screen-density-xhigh/C01-1_accept_left.png b/res/screen-density-xhigh/C01-1_accept_left.png
new file mode 100644 (file)
index 0000000..a3a4874
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_accept_left.png differ
diff --git a/res/screen-density-xhigh/C01-1_accept_left_dial_answer.png b/res/screen-density-xhigh/C01-1_accept_left_dial_answer.png
new file mode 100644 (file)
index 0000000..3770708
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_accept_left_dial_answer.png differ
diff --git a/res/screen-density-xhigh/C01-1_accept_left_dial_answer_dim.png b/res/screen-density-xhigh/C01-1_accept_left_dial_answer_dim.png
new file mode 100644 (file)
index 0000000..96bdde3
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_accept_left_dial_answer_dim.png differ
diff --git a/res/screen-density-xhigh/C01-1_accept_left_dim.png b/res/screen-density-xhigh/C01-1_accept_left_dim.png
new file mode 100644 (file)
index 0000000..cbd4a6a
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_accept_left_dim.png differ
diff --git a/res/screen-density-xhigh/C01-1_accept_left_press.png b/res/screen-density-xhigh/C01-1_accept_left_press.png
new file mode 100644 (file)
index 0000000..2f30827
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_accept_left_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_animation_bg.png b/res/screen-density-xhigh/C01-1_animation_bg.png
new file mode 100644 (file)
index 0000000..17df09a
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_animation_bg.png differ
diff --git a/res/screen-density-xhigh/C01-1_arrow_g.png b/res/screen-density-xhigh/C01-1_arrow_g.png
new file mode 100644 (file)
index 0000000..dc63e48
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_arrow_g.png differ
diff --git a/res/screen-density-xhigh/C01-1_arrow_r.png b/res/screen-density-xhigh/C01-1_arrow_r.png
new file mode 100644 (file)
index 0000000..bbda829
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_arrow_r.png differ
diff --git a/res/screen-density-xhigh/C01-1_bg.png b/res/screen-density-xhigh/C01-1_bg.png
new file mode 100644 (file)
index 0000000..0f9b480
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_bg.png differ
diff --git a/res/screen-density-xhigh/C01-1_btn_back.png b/res/screen-density-xhigh/C01-1_btn_back.png
new file mode 100644 (file)
index 0000000..d708747
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_btn_back.png differ
diff --git a/res/screen-density-xhigh/C01-1_btn_create.png b/res/screen-density-xhigh/C01-1_btn_create.png
new file mode 100644 (file)
index 0000000..aa8e122
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_btn_create.png differ
diff --git a/res/screen-density-xhigh/C01-1_button_01_press.png b/res/screen-density-xhigh/C01-1_button_01_press.png
new file mode 100644 (file)
index 0000000..af09cf1
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_button_01_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_button_02_normal.png b/res/screen-density-xhigh/C01-1_button_02_normal.png
new file mode 100644 (file)
index 0000000..7ad4694
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_button_02_normal.png differ
diff --git a/res/screen-density-xhigh/C01-1_button_03_normal.png b/res/screen-density-xhigh/C01-1_button_03_normal.png
new file mode 100644 (file)
index 0000000..2e6324e
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_button_03_normal.png differ
diff --git a/res/screen-density-xhigh/C01-1_button_05_press.png b/res/screen-density-xhigh/C01-1_button_05_press.png
new file mode 100644 (file)
index 0000000..b68bd66
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_button_05_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_button_bg.png b/res/screen-density-xhigh/C01-1_button_bg.png
new file mode 100644 (file)
index 0000000..7fda33e
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_button_bg.png differ
diff --git a/res/screen-density-xhigh/C01-1_button_call.png b/res/screen-density-xhigh/C01-1_button_call.png
new file mode 100644 (file)
index 0000000..f7a914b
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_button_call.png differ
diff --git a/res/screen-density-xhigh/C01-1_button_call_press.png b/res/screen-density-xhigh/C01-1_button_call_press.png
new file mode 100644 (file)
index 0000000..d580d24
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_button_call_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_button_end_call.png b/res/screen-density-xhigh/C01-1_button_end_call.png
new file mode 100644 (file)
index 0000000..dbc2d30
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_button_end_call.png differ
diff --git a/res/screen-density-xhigh/C01-1_button_hold_01.png b/res/screen-density-xhigh/C01-1_button_hold_01.png
new file mode 100644 (file)
index 0000000..7b9de93
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_button_hold_01.png differ
diff --git a/res/screen-density-xhigh/C01-1_button_hold_01_press.png b/res/screen-density-xhigh/C01-1_button_hold_01_press.png
new file mode 100644 (file)
index 0000000..d66c7de
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_button_hold_01_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_button_hold_normal.png b/res/screen-density-xhigh/C01-1_button_hold_normal.png
new file mode 100644 (file)
index 0000000..99641b9
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_button_hold_normal.png differ
diff --git a/res/screen-density-xhigh/C01-1_button_hold_normal_01.png b/res/screen-density-xhigh/C01-1_button_hold_normal_01.png
new file mode 100644 (file)
index 0000000..c95ea48
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_button_hold_normal_01.png differ
diff --git a/res/screen-density-xhigh/C01-1_button_hold_normal_01_press.png b/res/screen-density-xhigh/C01-1_button_hold_normal_01_press.png
new file mode 100644 (file)
index 0000000..c0250f6
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_button_hold_normal_01_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_button_hold_press.png b/res/screen-density-xhigh/C01-1_button_hold_press.png
new file mode 100644 (file)
index 0000000..5a7c9c2
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_button_hold_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_button_more.png b/res/screen-density-xhigh/C01-1_button_more.png
new file mode 100644 (file)
index 0000000..c439085
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_button_more.png differ
diff --git a/res/screen-density-xhigh/C01-1_button_more_press.png b/res/screen-density-xhigh/C01-1_button_more_press.png
new file mode 100644 (file)
index 0000000..08376c1
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_button_more_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_button_press.png b/res/screen-density-xhigh/C01-1_button_press.png
new file mode 100644 (file)
index 0000000..de4c3f9
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_button_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_call_ID_thumbnail_366x366.png b/res/screen-density-xhigh/C01-1_call_ID_thumbnail_366x366.png
new file mode 100644 (file)
index 0000000..a85028b
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_call_ID_thumbnail_366x366.png differ
diff --git a/res/screen-density-xhigh/C01-1_call_ID_thumbnail_shadow_224x224.png b/res/screen-density-xhigh/C01-1_call_ID_thumbnail_shadow_224x224.png
new file mode 100644 (file)
index 0000000..905d9ef
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_call_ID_thumbnail_shadow_224x224.png differ
diff --git a/res/screen-density-xhigh/C01-1_call_ID_thumbnail_shadow_388x388.png b/res/screen-density-xhigh/C01-1_call_ID_thumbnail_shadow_388x388.png
new file mode 100644 (file)
index 0000000..cb114f0
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_call_ID_thumbnail_shadow_388x388.png differ
diff --git a/res/screen-density-xhigh/C01-1_call_bg.png b/res/screen-density-xhigh/C01-1_call_bg.png
new file mode 100644 (file)
index 0000000..70a0039
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_call_bg.png differ
diff --git a/res/screen-density-xhigh/C01-1_call_bg02.png b/res/screen-density-xhigh/C01-1_call_bg02.png
new file mode 100644 (file)
index 0000000..c09bc54
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_call_bg02.png differ
diff --git a/res/screen-density-xhigh/C01-1_call_default_caller ID_720x720.png b/res/screen-density-xhigh/C01-1_call_default_caller ID_720x720.png
new file mode 100644 (file)
index 0000000..b69de98
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_call_default_caller ID_720x720.png differ
diff --git a/res/screen-density-xhigh/C01-1_call_group_caller ID_720x720.png b/res/screen-density-xhigh/C01-1_call_group_caller ID_720x720.png
new file mode 100644 (file)
index 0000000..772fc48
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_call_group_caller ID_720x720.png differ
diff --git a/res/screen-density-xhigh/C01-1_call_thumbnail_bg.png b/res/screen-density-xhigh/C01-1_call_thumbnail_bg.png
new file mode 100644 (file)
index 0000000..cb7a17d
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_call_thumbnail_bg.png differ
diff --git a/res/screen-density-xhigh/C01-1_caller_bg.png b/res/screen-density-xhigh/C01-1_caller_bg.png
new file mode 100644 (file)
index 0000000..e3fbee9
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_caller_bg.png differ
diff --git a/res/screen-density-xhigh/C01-1_calling_BG_01.png b/res/screen-density-xhigh/C01-1_calling_BG_01.png
new file mode 100644 (file)
index 0000000..c487a43
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_calling_BG_01.png differ
diff --git a/res/screen-density-xhigh/C01-1_conference_call_btn_01.png b/res/screen-density-xhigh/C01-1_conference_call_btn_01.png
new file mode 100644 (file)
index 0000000..b50ddf0
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_conference_call_btn_01.png differ
diff --git a/res/screen-density-xhigh/C01-1_conference_call_btn_01_press.png b/res/screen-density-xhigh/C01-1_conference_call_btn_01_press.png
new file mode 100644 (file)
index 0000000..10a73a5
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_conference_call_btn_01_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_conference_call_btn_02.png b/res/screen-density-xhigh/C01-1_conference_call_btn_02.png
new file mode 100644 (file)
index 0000000..3f82018
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_conference_call_btn_02.png differ
diff --git a/res/screen-density-xhigh/C01-1_conference_call_btn_02_press.png b/res/screen-density-xhigh/C01-1_conference_call_btn_02_press.png
new file mode 100644 (file)
index 0000000..10a73a5
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_conference_call_btn_02_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_conference_end.png b/res/screen-density-xhigh/C01-1_conference_end.png
new file mode 100644 (file)
index 0000000..f1103b7
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_conference_end.png differ
diff --git a/res/screen-density-xhigh/C01-1_conference_end_press.png b/res/screen-density-xhigh/C01-1_conference_end_press.png
new file mode 100644 (file)
index 0000000..ee17589
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_conference_end_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_conference_split.png b/res/screen-density-xhigh/C01-1_conference_split.png
new file mode 100644 (file)
index 0000000..74cfc0b
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_conference_split.png differ
diff --git a/res/screen-density-xhigh/C01-1_conference_split_press.png b/res/screen-density-xhigh/C01-1_conference_split_press.png
new file mode 100644 (file)
index 0000000..ec1ceeb
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_conference_split_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_contact_btn.png b/res/screen-density-xhigh/C01-1_contact_btn.png
new file mode 100644 (file)
index 0000000..02102c0
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_contact_btn.png differ
diff --git a/res/screen-density-xhigh/C01-1_contact_btn_icon.png b/res/screen-density-xhigh/C01-1_contact_btn_icon.png
new file mode 100644 (file)
index 0000000..8fc7ba9
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_contact_btn_icon.png differ
diff --git a/res/screen-density-xhigh/C01-1_contact_btn_icon_press.png b/res/screen-density-xhigh/C01-1_contact_btn_icon_press.png
new file mode 100644 (file)
index 0000000..cefe9d1
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_contact_btn_icon_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_contact_btn_press.png b/res/screen-density-xhigh/C01-1_contact_btn_press.png
new file mode 100644 (file)
index 0000000..ecb93c4
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_contact_btn_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_end call_BG_01.png b/res/screen-density-xhigh/C01-1_end call_BG_01.png
new file mode 100644 (file)
index 0000000..7052026
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_end call_BG_01.png differ
diff --git a/res/screen-density-xhigh/C01-1_end call_default_caller ID_366x366.png b/res/screen-density-xhigh/C01-1_end call_default_caller ID_366x366.png
new file mode 100644 (file)
index 0000000..1ffd35b
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_end call_default_caller ID_366x366.png differ
diff --git a/res/screen-density-xhigh/C01-1_end call_default_caller ID_720x370.png b/res/screen-density-xhigh/C01-1_end call_default_caller ID_720x370.png
new file mode 100644 (file)
index 0000000..1d6df58
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_end call_default_caller ID_720x370.png differ
diff --git a/res/screen-density-xhigh/C01-1_end call_default_caller ID_720x720.png b/res/screen-density-xhigh/C01-1_end call_default_caller ID_720x720.png
new file mode 100644 (file)
index 0000000..085c057
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_end call_default_caller ID_720x720.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_Hide.png b/res/screen-density-xhigh/C01-1_icon_Hide.png
new file mode 100644 (file)
index 0000000..88d3fa1
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_Hide.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_Hide_dim.png b/res/screen-density-xhigh/C01-1_icon_Hide_dim.png
new file mode 100644 (file)
index 0000000..03f7db6
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_Hide_dim.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_Hide_press.png b/res/screen-density-xhigh/C01-1_icon_Hide_press.png
new file mode 100644 (file)
index 0000000..ced239c
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_Hide_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_Hide_press_wh.png b/res/screen-density-xhigh/C01-1_icon_Hide_press_wh.png
new file mode 100644 (file)
index 0000000..ca158c4
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_Hide_press_wh.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_Pause.png b/res/screen-density-xhigh/C01-1_icon_Pause.png
new file mode 100644 (file)
index 0000000..2134376
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_Pause.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_Play.png b/res/screen-density-xhigh/C01-1_icon_Play.png
new file mode 100644 (file)
index 0000000..c59be52
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_Play.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_REC_78x78.png b/res/screen-density-xhigh/C01-1_icon_REC_78x78.png
new file mode 100644 (file)
index 0000000..b187c25
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_REC_78x78.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_Reject_with_Message.png b/res/screen-density-xhigh/C01-1_icon_Reject_with_Message.png
new file mode 100644 (file)
index 0000000..586e6d9
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_Reject_with_Message.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_add.png b/res/screen-density-xhigh/C01-1_icon_add.png
new file mode 100644 (file)
index 0000000..61cf76e
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_add.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_add_dim.png b/res/screen-density-xhigh/C01-1_icon_add_dim.png
new file mode 100644 (file)
index 0000000..39791fa
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_add_dim.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_add_press.png b/res/screen-density-xhigh/C01-1_icon_add_press.png
new file mode 100644 (file)
index 0000000..3e6f27d
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_add_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_add_press_wh.png b/res/screen-density-xhigh/C01-1_icon_add_press_wh.png
new file mode 100644 (file)
index 0000000..c07e615
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_add_press_wh.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_button_press.png b/res/screen-density-xhigh/C01-1_icon_button_press.png
new file mode 100644 (file)
index 0000000..35d77b5
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_button_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_call.png b/res/screen-density-xhigh/C01-1_icon_call.png
new file mode 100644 (file)
index 0000000..8414ffa
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_call.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_call_press.png b/res/screen-density-xhigh/C01-1_icon_call_press.png
new file mode 100644 (file)
index 0000000..ca0f49c
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_call_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_contacts.png b/res/screen-density-xhigh/C01-1_icon_contacts.png
new file mode 100644 (file)
index 0000000..3cf5856
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_contacts.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_contacts_dim.png b/res/screen-density-xhigh/C01-1_icon_contacts_dim.png
new file mode 100644 (file)
index 0000000..56e771d
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_contacts_dim.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_contacts_press.png b/res/screen-density-xhigh/C01-1_icon_contacts_press.png
new file mode 100644 (file)
index 0000000..4838c20
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_contacts_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_contacts_press_wh.png b/res/screen-density-xhigh/C01-1_icon_contacts_press_wh.png
new file mode 100644 (file)
index 0000000..81913d4
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_contacts_press_wh.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_end_call.png b/res/screen-density-xhigh/C01-1_icon_end_call.png
new file mode 100644 (file)
index 0000000..b3bf5f2
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_end_call.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_end_call_dim.png b/res/screen-density-xhigh/C01-1_icon_end_call_dim.png
new file mode 100644 (file)
index 0000000..1ac8547
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_end_call_dim.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_end_call_press_wh.png b/res/screen-density-xhigh/C01-1_icon_end_call_press_wh.png
new file mode 100644 (file)
index 0000000..1ac8547
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_end_call_press_wh.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_headset.png b/res/screen-density-xhigh/C01-1_icon_headset.png
new file mode 100644 (file)
index 0000000..e604393
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_headset.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_headset_dim.png b/res/screen-density-xhigh/C01-1_icon_headset_dim.png
new file mode 100644 (file)
index 0000000..dc00a7b
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_headset_dim.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_headset_press.png b/res/screen-density-xhigh/C01-1_icon_headset_press.png
new file mode 100644 (file)
index 0000000..0020f42
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_headset_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_headset_press_wh.png b/res/screen-density-xhigh/C01-1_icon_headset_press_wh.png
new file mode 100644 (file)
index 0000000..2e5e588
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_headset_press_wh.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_hold.png b/res/screen-density-xhigh/C01-1_icon_hold.png
new file mode 100644 (file)
index 0000000..ff00328
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_hold.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_hold_74x74.png b/res/screen-density-xhigh/C01-1_icon_hold_74x74.png
new file mode 100644 (file)
index 0000000..da7ac4d
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_hold_74x74.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_hold_74x74_press.png b/res/screen-density-xhigh/C01-1_icon_hold_74x74_press.png
new file mode 100644 (file)
index 0000000..3299cb4
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_hold_74x74_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_hold_78x78.png b/res/screen-density-xhigh/C01-1_icon_hold_78x78.png
new file mode 100644 (file)
index 0000000..2c1beab
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_hold_78x78.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_hold_78x78_press.png b/res/screen-density-xhigh/C01-1_icon_hold_78x78_press.png
new file mode 100644 (file)
index 0000000..91078ac
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_hold_78x78_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_hold_dim.png b/res/screen-density-xhigh/C01-1_icon_hold_dim.png
new file mode 100644 (file)
index 0000000..5d4731f
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_hold_dim.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_hold_press.png b/res/screen-density-xhigh/C01-1_icon_hold_press.png
new file mode 100644 (file)
index 0000000..133dee7
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_hold_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_hold_press_wh.png b/res/screen-density-xhigh/C01-1_icon_hold_press_wh.png
new file mode 100644 (file)
index 0000000..3e78d46
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_hold_press_wh.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_join.png b/res/screen-density-xhigh/C01-1_icon_join.png
new file mode 100644 (file)
index 0000000..c9205df
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_join.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_join_dim.png b/res/screen-density-xhigh/C01-1_icon_join_dim.png
new file mode 100644 (file)
index 0000000..45d2164
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_join_dim.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_join_press.png b/res/screen-density-xhigh/C01-1_icon_join_press.png
new file mode 100644 (file)
index 0000000..16af3a1
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_join_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_join_press_wh.png b/res/screen-density-xhigh/C01-1_icon_join_press_wh.png
new file mode 100644 (file)
index 0000000..4fc3ccd
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_join_press_wh.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_keypad.png b/res/screen-density-xhigh/C01-1_icon_keypad.png
new file mode 100644 (file)
index 0000000..e30dd9c
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_keypad.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_keypad_dim.png b/res/screen-density-xhigh/C01-1_icon_keypad_dim.png
new file mode 100644 (file)
index 0000000..363cbb2
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_keypad_dim.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_keypad_press.png b/res/screen-density-xhigh/C01-1_icon_keypad_press.png
new file mode 100644 (file)
index 0000000..363cbb2
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_keypad_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_keypad_press_wh.png b/res/screen-density-xhigh/C01-1_icon_keypad_press_wh.png
new file mode 100644 (file)
index 0000000..a551ced
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_keypad_press_wh.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_message.png b/res/screen-density-xhigh/C01-1_icon_message.png
new file mode 100644 (file)
index 0000000..00b4adb
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_message.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_message_dim.png b/res/screen-density-xhigh/C01-1_icon_message_dim.png
new file mode 100644 (file)
index 0000000..c31d5d0
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_message_dim.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_message_press.png b/res/screen-density-xhigh/C01-1_icon_message_press.png
new file mode 100644 (file)
index 0000000..c31d5d0
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_message_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_message_press_wh.png b/res/screen-density-xhigh/C01-1_icon_message_press_wh.png
new file mode 100644 (file)
index 0000000..8d658a0
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_message_press_wh.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_more.png b/res/screen-density-xhigh/C01-1_icon_more.png
new file mode 100644 (file)
index 0000000..bc3170d
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_more.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_more_Manage conference call.png b/res/screen-density-xhigh/C01-1_icon_more_Manage conference call.png
new file mode 100644 (file)
index 0000000..df93ba4
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_more_Manage conference call.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_more_press.png b/res/screen-density-xhigh/C01-1_icon_more_press.png
new file mode 100644 (file)
index 0000000..9e30260
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_more_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_mute.png b/res/screen-density-xhigh/C01-1_icon_mute.png
new file mode 100644 (file)
index 0000000..b0a9362
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_mute.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_mute_dim.png b/res/screen-density-xhigh/C01-1_icon_mute_dim.png
new file mode 100644 (file)
index 0000000..df0cb11
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_mute_dim.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_mute_on.png b/res/screen-density-xhigh/C01-1_icon_mute_on.png
new file mode 100644 (file)
index 0000000..81f8250
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_mute_on.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_mute_on_dim.png b/res/screen-density-xhigh/C01-1_icon_mute_on_dim.png
new file mode 100644 (file)
index 0000000..3e5cf30
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_mute_on_dim.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_mute_on_press.png b/res/screen-density-xhigh/C01-1_icon_mute_on_press.png
new file mode 100644 (file)
index 0000000..3e5cf30
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_mute_on_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_mute_press.png b/res/screen-density-xhigh/C01-1_icon_mute_press.png
new file mode 100644 (file)
index 0000000..df0cb11
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_mute_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_mute_press_wh.png b/res/screen-density-xhigh/C01-1_icon_mute_press_wh.png
new file mode 100644 (file)
index 0000000..6e7f648
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_mute_press_wh.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_record.png b/res/screen-density-xhigh/C01-1_icon_record.png
new file mode 100644 (file)
index 0000000..da6b8e8
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_record.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_record_dim.png b/res/screen-density-xhigh/C01-1_icon_record_dim.png
new file mode 100644 (file)
index 0000000..74bcb2c
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_record_dim.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_record_press.png b/res/screen-density-xhigh/C01-1_icon_record_press.png
new file mode 100644 (file)
index 0000000..dca1d50
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_record_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_record_press_wh.png b/res/screen-density-xhigh/C01-1_icon_record_press_wh.png
new file mode 100644 (file)
index 0000000..ff231cf
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_record_press_wh.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_speaker.png b/res/screen-density-xhigh/C01-1_icon_speaker.png
new file mode 100644 (file)
index 0000000..d239183
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_speaker.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_speaker_dim.png b/res/screen-density-xhigh/C01-1_icon_speaker_dim.png
new file mode 100644 (file)
index 0000000..964b348
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_speaker_dim.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_speaker_on.png b/res/screen-density-xhigh/C01-1_icon_speaker_on.png
new file mode 100644 (file)
index 0000000..c523fd1
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_speaker_on.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_speaker_on_dim.png b/res/screen-density-xhigh/C01-1_icon_speaker_on_dim.png
new file mode 100644 (file)
index 0000000..879be14
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_speaker_on_dim.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_speaker_on_press.png b/res/screen-density-xhigh/C01-1_icon_speaker_on_press.png
new file mode 100644 (file)
index 0000000..879be14
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_speaker_on_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_speaker_press.png b/res/screen-density-xhigh/C01-1_icon_speaker_press.png
new file mode 100644 (file)
index 0000000..964b348
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_speaker_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_speaker_press_wh.png b/res/screen-density-xhigh/C01-1_icon_speaker_press_wh.png
new file mode 100644 (file)
index 0000000..460944d
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_speaker_press_wh.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_stop.png b/res/screen-density-xhigh/C01-1_icon_stop.png
new file mode 100644 (file)
index 0000000..6ce0b4a
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_stop.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_stop_dim.png b/res/screen-density-xhigh/C01-1_icon_stop_dim.png
new file mode 100644 (file)
index 0000000..1bfe8d5
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_stop_dim.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_stop_press.png b/res/screen-density-xhigh/C01-1_icon_stop_press.png
new file mode 100644 (file)
index 0000000..2e9cf56
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_stop_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_stop_press_wh.png b/res/screen-density-xhigh/C01-1_icon_stop_press_wh.png
new file mode 100644 (file)
index 0000000..5032036
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_stop_press_wh.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_swap.png b/res/screen-density-xhigh/C01-1_icon_swap.png
new file mode 100644 (file)
index 0000000..12c0d8d
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_swap.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_swap_press.png b/res/screen-density-xhigh/C01-1_icon_swap_press.png
new file mode 100644 (file)
index 0000000..78a7510
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_swap_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_unhold.png b/res/screen-density-xhigh/C01-1_icon_unhold.png
new file mode 100644 (file)
index 0000000..8d28fa4
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_unhold.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_unhold_74x74.png b/res/screen-density-xhigh/C01-1_icon_unhold_74x74.png
new file mode 100644 (file)
index 0000000..d945604
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_unhold_74x74.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_unhold_74x74_press.png b/res/screen-density-xhigh/C01-1_icon_unhold_74x74_press.png
new file mode 100644 (file)
index 0000000..5bb0bc3
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_unhold_74x74_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_unhold_78x78.png b/res/screen-density-xhigh/C01-1_icon_unhold_78x78.png
new file mode 100644 (file)
index 0000000..95e21aa
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_unhold_78x78.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_unhold_78x78_press.png b/res/screen-density-xhigh/C01-1_icon_unhold_78x78_press.png
new file mode 100644 (file)
index 0000000..158762f
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_unhold_78x78_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_unhold_dim.png b/res/screen-density-xhigh/C01-1_icon_unhold_dim.png
new file mode 100644 (file)
index 0000000..4d68eac
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_unhold_dim.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_unhold_press.png b/res/screen-density-xhigh/C01-1_icon_unhold_press.png
new file mode 100644 (file)
index 0000000..c27b75a
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_unhold_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_unhold_press_wh.png b/res/screen-density-xhigh/C01-1_icon_unhold_press_wh.png
new file mode 100644 (file)
index 0000000..7703fe3
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_unhold_press_wh.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_video call.png b/res/screen-density-xhigh/C01-1_icon_video call.png
new file mode 100644 (file)
index 0000000..a6ba953
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_video call.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_video call_dim.png b/res/screen-density-xhigh/C01-1_icon_video call_dim.png
new file mode 100644 (file)
index 0000000..d0c156d
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_video call_dim.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_video call_press.png b/res/screen-density-xhigh/C01-1_icon_video call_press.png
new file mode 100644 (file)
index 0000000..1ca9abb
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_video call_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_video call_press_wh.png b/res/screen-density-xhigh/C01-1_icon_video call_press_wh.png
new file mode 100644 (file)
index 0000000..2b58ccc
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_video call_press_wh.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_voice call.png b/res/screen-density-xhigh/C01-1_icon_voice call.png
new file mode 100644 (file)
index 0000000..fe16d8a
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_voice call.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_voice call_dim.png b/res/screen-density-xhigh/C01-1_icon_voice call_dim.png
new file mode 100644 (file)
index 0000000..8ed30b0
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_voice call_dim.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_voice call_press.png b/res/screen-density-xhigh/C01-1_icon_voice call_press.png
new file mode 100644 (file)
index 0000000..8ed30b0
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_voice call_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_icon_voice call_press_wh.png b/res/screen-density-xhigh/C01-1_icon_voice call_press_wh.png
new file mode 100644 (file)
index 0000000..f7796fd
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_icon_voice call_press_wh.png differ
diff --git a/res/screen-density-xhigh/C01-1_keypad_btn_icon.png b/res/screen-density-xhigh/C01-1_keypad_btn_icon.png
new file mode 100644 (file)
index 0000000..3601e35
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_keypad_btn_icon.png differ
diff --git a/res/screen-density-xhigh/C01-1_keypad_btn_input.png b/res/screen-density-xhigh/C01-1_keypad_btn_input.png
new file mode 100644 (file)
index 0000000..24b3444
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_keypad_btn_input.png differ
diff --git a/res/screen-density-xhigh/C01-1_keypad_btn_normal.png b/res/screen-density-xhigh/C01-1_keypad_btn_normal.png
new file mode 100644 (file)
index 0000000..5500465
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_keypad_btn_normal.png differ
diff --git a/res/screen-density-xhigh/C01-1_keypad_btn_press.png b/res/screen-density-xhigh/C01-1_keypad_btn_press.png
new file mode 100644 (file)
index 0000000..4d852e4
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_keypad_btn_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_lock_icon_accept.png b/res/screen-density-xhigh/C01-1_lock_icon_accept.png
new file mode 100644 (file)
index 0000000..18816ee
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_lock_icon_accept.png differ
diff --git a/res/screen-density-xhigh/C01-1_lock_icon_accept_arrow.png b/res/screen-density-xhigh/C01-1_lock_icon_accept_arrow.png
new file mode 100644 (file)
index 0000000..ad2b227
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_lock_icon_accept_arrow.png differ
diff --git a/res/screen-density-xhigh/C01-1_lock_icon_accept_arrow_press.png b/res/screen-density-xhigh/C01-1_lock_icon_accept_arrow_press.png
new file mode 100644 (file)
index 0000000..29772b1
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_lock_icon_accept_arrow_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_lock_icon_accept_press.png b/res/screen-density-xhigh/C01-1_lock_icon_accept_press.png
new file mode 100644 (file)
index 0000000..09d4d15
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_lock_icon_accept_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_lock_icon_reject.png b/res/screen-density-xhigh/C01-1_lock_icon_reject.png
new file mode 100644 (file)
index 0000000..de951cc
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_lock_icon_reject.png differ
diff --git a/res/screen-density-xhigh/C01-1_lock_icon_reject_arrow.png b/res/screen-density-xhigh/C01-1_lock_icon_reject_arrow.png
new file mode 100644 (file)
index 0000000..a003c38
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_lock_icon_reject_arrow.png differ
diff --git a/res/screen-density-xhigh/C01-1_lock_icon_reject_arrow_press.png b/res/screen-density-xhigh/C01-1_lock_icon_reject_arrow_press.png
new file mode 100644 (file)
index 0000000..d1c03e2
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_lock_icon_reject_arrow_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_lock_icon_reject_press.png b/res/screen-density-xhigh/C01-1_lock_icon_reject_press.png
new file mode 100644 (file)
index 0000000..cc3cb42
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_lock_icon_reject_press.png differ
diff --git a/res/screen-density-xhigh/C01-1_multil_default_caller ID_366x366.png b/res/screen-density-xhigh/C01-1_multil_default_caller ID_366x366.png
new file mode 100644 (file)
index 0000000..3339901
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_multil_default_caller ID_366x366.png differ
diff --git a/res/screen-density-xhigh/C01-1_multil_default_caller ID_720x370.png b/res/screen-density-xhigh/C01-1_multil_default_caller ID_720x370.png
new file mode 100644 (file)
index 0000000..c638417
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_multil_default_caller ID_720x370.png differ
diff --git a/res/screen-density-xhigh/C01-1_multil_default_caller ID_720x720.png b/res/screen-density-xhigh/C01-1_multil_default_caller ID_720x720.png
new file mode 100644 (file)
index 0000000..f13ec55
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_multil_default_caller ID_720x720.png differ
diff --git a/res/screen-density-xhigh/C01-1_outgoingcall_No caller ID.png b/res/screen-density-xhigh/C01-1_outgoingcall_No caller ID.png
new file mode 100644 (file)
index 0000000..57c5d57
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_outgoingcall_No caller ID.png differ
diff --git a/res/screen-density-xhigh/C01-1_popup_arrow.png b/res/screen-density-xhigh/C01-1_popup_arrow.png
new file mode 100644 (file)
index 0000000..74cd5e2
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_popup_arrow.png differ
diff --git a/res/screen-density-xhigh/C01-1_popup_bg.png b/res/screen-density-xhigh/C01-1_popup_bg.png
new file mode 100644 (file)
index 0000000..78c64f2
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_popup_bg.png differ
diff --git a/res/screen-density-xhigh/C01-1_reject_right.png b/res/screen-density-xhigh/C01-1_reject_right.png
new file mode 100644 (file)
index 0000000..23c512c
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_reject_right.png differ
diff --git a/res/screen-density-xhigh/C01-1_reject_right_dial_decline.png b/res/screen-density-xhigh/C01-1_reject_right_dial_decline.png
new file mode 100644 (file)
index 0000000..1511b41
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_reject_right_dial_decline.png differ
diff --git a/res/screen-density-xhigh/C01-1_reject_right_dial_decline_dim.png b/res/screen-density-xhigh/C01-1_reject_right_dial_decline_dim.png
new file mode 100644 (file)
index 0000000..bcd2582
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_reject_right_dial_decline_dim.png differ
diff --git a/res/screen-density-xhigh/C01-1_reject_right_dim.png b/res/screen-density-xhigh/C01-1_reject_right_dim.png
new file mode 100644 (file)
index 0000000..6bdedea
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_reject_right_dim.png differ
diff --git a/res/screen-density-xhigh/C01-1_voice_call_icon.png b/res/screen-density-xhigh/C01-1_voice_call_icon.png
new file mode 100644 (file)
index 0000000..df2e9a8
Binary files /dev/null and b/res/screen-density-xhigh/C01-1_voice_call_icon.png differ
diff --git a/res/screen-density-xhigh/C01-3_dialer_btn_1line_bg.9.png b/res/screen-density-xhigh/C01-3_dialer_btn_1line_bg.9.png
new file mode 100644 (file)
index 0000000..598b82b
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_dialer_btn_1line_bg.9.png differ
diff --git a/res/screen-density-xhigh/C01-3_dialer_btn_1line_bg.png b/res/screen-density-xhigh/C01-3_dialer_btn_1line_bg.png
new file mode 100644 (file)
index 0000000..87cc4fc
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_dialer_btn_1line_bg.png differ
diff --git a/res/screen-density-xhigh/C01-3_dialer_btn_2line_bg.9.png b/res/screen-density-xhigh/C01-3_dialer_btn_2line_bg.9.png
new file mode 100644 (file)
index 0000000..ab4018e
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_dialer_btn_2line_bg.9.png differ
diff --git a/res/screen-density-xhigh/C01-3_dialer_btn_2line_bg.png b/res/screen-density-xhigh/C01-3_dialer_btn_2line_bg.png
new file mode 100644 (file)
index 0000000..b9f50ef
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_dialer_btn_2line_bg.png differ
diff --git a/res/screen-density-xhigh/C01-3_dialer_btn_3line_bg.9.png b/res/screen-density-xhigh/C01-3_dialer_btn_3line_bg.9.png
new file mode 100644 (file)
index 0000000..820ca77
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_dialer_btn_3line_bg.9.png differ
diff --git a/res/screen-density-xhigh/C01-3_dialer_btn_3line_bg.png b/res/screen-density-xhigh/C01-3_dialer_btn_3line_bg.png
new file mode 100644 (file)
index 0000000..6198e88
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_dialer_btn_3line_bg.png differ
diff --git a/res/screen-density-xhigh/C01-3_dialer_btn_4line_bg.9.png b/res/screen-density-xhigh/C01-3_dialer_btn_4line_bg.9.png
new file mode 100644 (file)
index 0000000..c281a86
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_dialer_btn_4line_bg.9.png differ
diff --git a/res/screen-density-xhigh/C01-3_dialer_btn_4line_bg.png b/res/screen-density-xhigh/C01-3_dialer_btn_4line_bg.png
new file mode 100644 (file)
index 0000000..3f5c80e
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_dialer_btn_4line_bg.png differ
diff --git a/res/screen-density-xhigh/C01-3_dialer_btn_5line_bg.9.png b/res/screen-density-xhigh/C01-3_dialer_btn_5line_bg.9.png
new file mode 100644 (file)
index 0000000..75e5b7c
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_dialer_btn_5line_bg.9.png differ
diff --git a/res/screen-density-xhigh/C01-3_dialer_btn_5line_bg.png b/res/screen-density-xhigh/C01-3_dialer_btn_5line_bg.png
new file mode 100644 (file)
index 0000000..88801b3
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_dialer_btn_5line_bg.png differ
diff --git a/res/screen-density-xhigh/C01-3_dialer_btn_call_bg.9.png b/res/screen-density-xhigh/C01-3_dialer_btn_call_bg.9.png
new file mode 100644 (file)
index 0000000..38a69e6
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_dialer_btn_call_bg.9.png differ
diff --git a/res/screen-density-xhigh/C01-3_dialer_btn_call_bg.png b/res/screen-density-xhigh/C01-3_dialer_btn_call_bg.png
new file mode 100644 (file)
index 0000000..8d1fd3a
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_dialer_btn_call_bg.png differ
diff --git a/res/screen-density-xhigh/C01-3_dialer_btn_option_bg.9.png b/res/screen-density-xhigh/C01-3_dialer_btn_option_bg.9.png
new file mode 100644 (file)
index 0000000..795c513
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_dialer_btn_option_bg.9.png differ
diff --git a/res/screen-density-xhigh/C01-3_dialer_btn_option_bg.png b/res/screen-density-xhigh/C01-3_dialer_btn_option_bg.png
new file mode 100644 (file)
index 0000000..a327add
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_dialer_btn_option_bg.png differ
diff --git a/res/screen-density-xhigh/C01-3_dialer_btn_option_press.9.png b/res/screen-density-xhigh/C01-3_dialer_btn_option_press.9.png
new file mode 100644 (file)
index 0000000..074d0a8
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_dialer_btn_option_press.9.png differ
diff --git a/res/screen-density-xhigh/C01-3_dialer_btn_option_press.png b/res/screen-density-xhigh/C01-3_dialer_btn_option_press.png
new file mode 100644 (file)
index 0000000..76cbd46
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_dialer_btn_option_press.png differ
diff --git a/res/screen-density-xhigh/C01-3_dialer_btn_press.9.png b/res/screen-density-xhigh/C01-3_dialer_btn_press.9.png
new file mode 100644 (file)
index 0000000..549481e
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_dialer_btn_press.9.png differ
diff --git a/res/screen-density-xhigh/C01-3_dialer_btn_press.png b/res/screen-density-xhigh/C01-3_dialer_btn_press.png
new file mode 100644 (file)
index 0000000..6dc22bc
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_dialer_btn_press.png differ
diff --git a/res/screen-density-xhigh/C01-3_dialer_icon_01.png b/res/screen-density-xhigh/C01-3_dialer_icon_01.png
new file mode 100644 (file)
index 0000000..5753355
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_dialer_icon_01.png differ
diff --git a/res/screen-density-xhigh/C01-3_dialer_icon_01_press.png b/res/screen-density-xhigh/C01-3_dialer_icon_01_press.png
new file mode 100644 (file)
index 0000000..b79f2c6
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_dialer_icon_01_press.png differ
diff --git a/res/screen-density-xhigh/C01-3_dialer_icon_clear.png b/res/screen-density-xhigh/C01-3_dialer_icon_clear.png
new file mode 100644 (file)
index 0000000..719cde7
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_dialer_icon_clear.png differ
diff --git a/res/screen-density-xhigh/C01-3_dialer_icon_star.png b/res/screen-density-xhigh/C01-3_dialer_icon_star.png
new file mode 100644 (file)
index 0000000..d3893b4
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_dialer_icon_star.png differ
diff --git a/res/screen-density-xhigh/C01-3_dialer_search_field_bg.png b/res/screen-density-xhigh/C01-3_dialer_search_field_bg.png
new file mode 100644 (file)
index 0000000..c80a019
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_dialer_search_field_bg.png differ
diff --git a/res/screen-density-xhigh/C01-3_icon_call.png b/res/screen-density-xhigh/C01-3_icon_call.png
new file mode 100644 (file)
index 0000000..767fd97
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_icon_call.png differ
diff --git a/res/screen-density-xhigh/C01-3_icon_clear.png b/res/screen-density-xhigh/C01-3_icon_clear.png
new file mode 100644 (file)
index 0000000..94fe6de
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_icon_clear.png differ
diff --git a/res/screen-density-xhigh/C01-3_icon_message.png b/res/screen-density-xhigh/C01-3_icon_message.png
new file mode 100644 (file)
index 0000000..e53f31a
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_icon_message.png differ
diff --git a/res/screen-density-xhigh/C01-3_icon_voicecall.png b/res/screen-density-xhigh/C01-3_icon_voicecall.png
new file mode 100644 (file)
index 0000000..4d1019f
Binary files /dev/null and b/res/screen-density-xhigh/C01-3_icon_voicecall.png differ
diff --git a/res/screen-density-xhigh/C01-4_btn_icon_call.png b/res/screen-density-xhigh/C01-4_btn_icon_call.png
new file mode 100644 (file)
index 0000000..0b1038e
Binary files /dev/null and b/res/screen-density-xhigh/C01-4_btn_icon_call.png differ
diff --git a/res/screen-density-xhigh/C01-4_btn_icon_call_dim.png b/res/screen-density-xhigh/C01-4_btn_icon_call_dim.png
new file mode 100644 (file)
index 0000000..d2a68f6
Binary files /dev/null and b/res/screen-density-xhigh/C01-4_btn_icon_call_dim.png differ
diff --git a/res/screen-density-xhigh/C01-4_btn_icon_message.png b/res/screen-density-xhigh/C01-4_btn_icon_message.png
new file mode 100644 (file)
index 0000000..dd63da9
Binary files /dev/null and b/res/screen-density-xhigh/C01-4_btn_icon_message.png differ
diff --git a/res/screen-density-xhigh/C01-4_btn_icon_message_dim.png b/res/screen-density-xhigh/C01-4_btn_icon_message_dim.png
new file mode 100644 (file)
index 0000000..485ff79
Binary files /dev/null and b/res/screen-density-xhigh/C01-4_btn_icon_message_dim.png differ
diff --git a/res/screen-density-xhigh/C01-4_btn_icon_video_call.png b/res/screen-density-xhigh/C01-4_btn_icon_video_call.png
new file mode 100644 (file)
index 0000000..fe450c5
Binary files /dev/null and b/res/screen-density-xhigh/C01-4_btn_icon_video_call.png differ
diff --git a/res/screen-density-xhigh/C01-4_btn_icon_video_call_dim.png b/res/screen-density-xhigh/C01-4_btn_icon_video_call_dim.png
new file mode 100644 (file)
index 0000000..29ce012
Binary files /dev/null and b/res/screen-density-xhigh/C01-4_btn_icon_video_call_dim.png differ
diff --git a/res/screen-density-xhigh/C01-4_controlbar_icon_cancel.png b/res/screen-density-xhigh/C01-4_controlbar_icon_cancel.png
new file mode 100644 (file)
index 0000000..0960b62
Binary files /dev/null and b/res/screen-density-xhigh/C01-4_controlbar_icon_cancel.png differ
diff --git a/res/screen-density-xhigh/C01-4_controlbar_icon_delete.png b/res/screen-density-xhigh/C01-4_controlbar_icon_delete.png
new file mode 100644 (file)
index 0000000..33a6bc7
Binary files /dev/null and b/res/screen-density-xhigh/C01-4_controlbar_icon_delete.png differ
diff --git a/res/screen-density-xhigh/C01-4_controlbar_icon_done.png b/res/screen-density-xhigh/C01-4_controlbar_icon_done.png
new file mode 100644 (file)
index 0000000..c5ddbfe
Binary files /dev/null and b/res/screen-density-xhigh/C01-4_controlbar_icon_done.png differ
diff --git a/res/screen-density-xhigh/C01-4_controlbar_icon_save.png b/res/screen-density-xhigh/C01-4_controlbar_icon_save.png
new file mode 100644 (file)
index 0000000..39baa6a
Binary files /dev/null and b/res/screen-density-xhigh/C01-4_controlbar_icon_save.png differ
diff --git a/res/screen-density-xhigh/C01-4_icon_Blocked(Auto-rejected).png b/res/screen-density-xhigh/C01-4_icon_Blocked(Auto-rejected).png
new file mode 100644 (file)
index 0000000..7f2cf70
Binary files /dev/null and b/res/screen-density-xhigh/C01-4_icon_Blocked(Auto-rejected).png differ
diff --git a/res/screen-density-xhigh/C01-4_icon_Blocked.png b/res/screen-density-xhigh/C01-4_icon_Blocked.png
new file mode 100644 (file)
index 0000000..a1cefa4
Binary files /dev/null and b/res/screen-density-xhigh/C01-4_icon_Blocked.png differ
diff --git a/res/screen-density-xhigh/C01-4_icon_call_blocked.png b/res/screen-density-xhigh/C01-4_icon_call_blocked.png
new file mode 100644 (file)
index 0000000..b5bbe16
Binary files /dev/null and b/res/screen-density-xhigh/C01-4_icon_call_blocked.png differ
diff --git a/res/screen-density-xhigh/C01-4_icon_dialed.png b/res/screen-density-xhigh/C01-4_icon_dialed.png
new file mode 100644 (file)
index 0000000..28c4c17
Binary files /dev/null and b/res/screen-density-xhigh/C01-4_icon_dialed.png differ
diff --git a/res/screen-density-xhigh/C01-4_icon_message_blocked.png b/res/screen-density-xhigh/C01-4_icon_message_blocked.png
new file mode 100644 (file)
index 0000000..e665864
Binary files /dev/null and b/res/screen-density-xhigh/C01-4_icon_message_blocked.png differ
diff --git a/res/screen-density-xhigh/C01-4_icon_missed-call.png b/res/screen-density-xhigh/C01-4_icon_missed-call.png
new file mode 100644 (file)
index 0000000..e778c32
Binary files /dev/null and b/res/screen-density-xhigh/C01-4_icon_missed-call.png differ
diff --git a/res/screen-density-xhigh/C01-4_icon_received.png b/res/screen-density-xhigh/C01-4_icon_received.png
new file mode 100644 (file)
index 0000000..72c3b68
Binary files /dev/null and b/res/screen-density-xhigh/C01-4_icon_received.png differ
diff --git a/res/screen-density-xhigh/C01-4_icon_rejected.png b/res/screen-density-xhigh/C01-4_icon_rejected.png
new file mode 100644 (file)
index 0000000..dcc739e
Binary files /dev/null and b/res/screen-density-xhigh/C01-4_icon_rejected.png differ
diff --git a/res/screen-density-xhigh/C01-5_icon_cancel.png b/res/screen-density-xhigh/C01-5_icon_cancel.png
new file mode 100644 (file)
index 0000000..c6cb2de
Binary files /dev/null and b/res/screen-density-xhigh/C01-5_icon_cancel.png differ
diff --git a/res/screen-density-xhigh/C01-5_icon_speeddial_check.png b/res/screen-density-xhigh/C01-5_icon_speeddial_check.png
new file mode 100644 (file)
index 0000000..df13f7e
Binary files /dev/null and b/res/screen-density-xhigh/C01-5_icon_speeddial_check.png differ
diff --git a/res/screen-density-xhigh/C01-5_icon_voicecall.png b/res/screen-density-xhigh/C01-5_icon_voicecall.png
new file mode 100644 (file)
index 0000000..73f06db
Binary files /dev/null and b/res/screen-density-xhigh/C01-5_icon_voicecall.png differ
diff --git a/res/screen-density-xhigh/C01-5_speeddial_thumbnail_213x213.png b/res/screen-density-xhigh/C01-5_speeddial_thumbnail_213x213.png
new file mode 100644 (file)
index 0000000..6d10770
Binary files /dev/null and b/res/screen-density-xhigh/C01-5_speeddial_thumbnail_213x213.png differ
diff --git a/res/screen-density-xhigh/C01_3_dialer_icon_option.png b/res/screen-density-xhigh/C01_3_dialer_icon_option.png
new file mode 100644 (file)
index 0000000..1d435fd
Binary files /dev/null and b/res/screen-density-xhigh/C01_3_dialer_icon_option.png differ
diff --git a/res/screen-density-xhigh/M01_contact_default_image.png b/res/screen-density-xhigh/M01_contact_default_image.png
new file mode 100644 (file)
index 0000000..846a993
Binary files /dev/null and b/res/screen-density-xhigh/M01_contact_default_image.png differ
diff --git a/res/screen-density-xhigh/M01_contact_default_image_press.png b/res/screen-density-xhigh/M01_contact_default_image_press.png
new file mode 100644 (file)
index 0000000..a34bb4e
Binary files /dev/null and b/res/screen-density-xhigh/M01_contact_default_image_press.png differ
diff --git a/res/screen-density-xhigh/more.png b/res/screen-density-xhigh/more.png
new file mode 100644 (file)
index 0000000..3110f55
Binary files /dev/null and b/res/screen-density-xhigh/more.png differ
diff --git a/res/screen-density-xhigh/more_press.png b/res/screen-density-xhigh/more_press.png
new file mode 100644 (file)
index 0000000..03a1c1d
Binary files /dev/null and b/res/screen-density-xhigh/more_press.png differ
diff --git a/res/screen-size-normal/IDF_FORM.xml b/res/screen-size-normal/IDF_FORM.xml
new file mode 100644 (file)
index 0000000..eba4da5
--- /dev/null
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<!DOCTYPE Scene SYSTEM "UIForm.dtd">
+
+<Scene Bversion="3.0.0.v20120410" Dversion="20120315">
+       <LogicalCoordinate>720</LogicalCoordinate>
+    <Form id="IDF_FORM">
+        <property backgroundColor="" backgroundOpacity="100" orientation="Automatic" softKey0NormalIcon="" softKey0PressedIcon="" softKey0Text="" softKey1NormalIcon="" softKey1PressedIcon="" softKey1Text="" title="" titleAlign="ALIGN_CENTER" titleIcon="" translucentFooter="false" translucentHeader="false" translucentIndicator="false"/>
+        <layout mode="Portrait" style="FORM_STYLE_INDICATOR|FORM_STYLE_HEADER|FORM_STYLE_FOOTER" type="LAYOUT_RELATIVE"/>
+        <layout mode="Landscape" style="FORM_STYLE_INDICATOR|FORM_STYLE_HEADER|FORM_STYLE_FOOTER" type="LAYOUT_RELATIVE"/>
+    </Form>
+    <Footer>
+        <property backgroundBitmapPath="" color="" colorOpacity="0" disabledButtonColor="" disabledButtonColorOpacity="0" disabledButtonTextColor="" disabledItemColor="" disabledItemColorOpacity="0" disabledItemTextColor="" footerStyle="FOOTER_STYLE_BUTTON_TEXT" highlightedButtonColor="" highlightedButtonColorOpacity="0" highlightedButtonTextColor="" highlightedItemColor="" highlightedItemColorOpacity="0" highlightedItemTextColor="" normalButtonColor="" normalButtonColorOpacity="0" normalButtonTextColor="" normalItemColor="" normalItemColorOpacity="0" normalItemTextColor="" pressedButtonColor="" pressedButtonColorOpacity="0" pressedButtonTextColor="" pressedItemColor="" pressedItemColorOpacity="0" pressedItemTextColor="" selectedItemColor="" selectedItemColorOpacity="0" selectedItemTextColor="" showBackButton="true"/>
+        <itemSet/>
+    </Footer>
+    <Header>
+        <property backgroundBitmapPath="" color="" colorOpacity="0" descriptionText="" descriptionTextColor="" disabledButtonColor="" disabledButtonColorOpacity="0" disabledButtonTextColor="" disabledItemColor="" disabledItemColorOpacity="0" disabledItemTextColor="" headerStyle="HEADER_STYLE_TITLE" highlightedButtonColor="" highlightedButtonColorOpacity="0" highlightedButtonTextColor="" highlightedItemColor="" highlightedItemColorOpacity="0" highlightedItemTextColor="" normalButtonColor="" normalButtonColorOpacity="0" normalButtonTextColor="" normalItemColor="" normalItemColorOpacity="0" normalItemTextColor="" pressedButtonColor="" pressedButtonColorOpacity="0" pressedButtonTextColor="" pressedItemColor="" pressedItemColorOpacity="0" pressedItemTextColor="" selectedItemColor="" selectedItemColorOpacity="0" selectedItemTextColor="" titleIconPath="" titleText="Hello Tizen!" titleTextColor=""/>
+        <itemSet/>
+    </Header>
+    <Button id="IDC_BUTTON_OK" parent="IDF_FORM">
+        <property disableTextColor="" disabledBitmapPath="" disabledColor="" disabledColorOpacity="0" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="0" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="0" normalTextColor="" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="0" pressedTextColor="" text="OK" textSize="32" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="true" centerVertical="true" height="135" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="" rightRelationType="" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="420" />
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="true" centerVertical="true" height="102" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="" rightRelationType="" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="400" />
+    </Button>
+</Scene>
diff --git a/res/screen-size-normal/IDL_CALL_FORM.xml b/res/screen-size-normal/IDL_CALL_FORM.xml
new file mode 100644 (file)
index 0000000..732eec1
--- /dev/null
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<!DOCTYPE Scene SYSTEM "UIForm.dtd">
+
+<Scene Bversion="2.0.0.201302250946" Dversion="20120315">
+    <LogicalCoordinate>720</LogicalCoordinate>
+    <Form id="IDL_CALL_FORM">
+        <property backgroundColor="#000000" backgroundColorOpacity="100" orientation="Automatic" softKey0NormalIcon="" softKey0PressedIcon="" softKey0Text="" softKey1NormalIcon="" softKey1PressedIcon="" softKey1Text="" title="" titleAlign="ALIGN_CENTER" titleIcon="" translucentFooter="false" translucentHeader="false" translucentIndicator="false"/>
+        <layout mode="Portrait" style="FORM_STYLE_INDICATOR" type="LAYOUT_RELATIVE"/>
+        <layout mode="Landscape" style="FORM_STYLE_INDICATOR" type="LAYOUT_RELATIVE"/>
+    </Form>
+    <Label id="IDC_CALLER1_BIGPHOTO_LABEL" parent="IDL_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="IDL_CALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="true" centerVertical="false" height="720" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="500" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDL_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDL_CALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="0"/>
+        <layout bottomRelation="IDL_CALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="660" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="720" marginTop="0" mode="Landscape" rightRelation="" rightRelationType="" topRelation="IDL_CALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="560" x="0" y="0"/>
+    </Label>
+    <Label id="IDC_BACKGROUND_LABEL" parent="IDL_CALL_FORM">
+        <property backgroundBitmapPath="C01-1_Incoming call_BG_01.png" backgroundColor="#000000" backgroundColorOpacity="50" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="160" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDL_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDL_CALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="0"/>
+        <layout bottomRelation="IDL_CALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="160" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_CALLER1_BIGPHOTO_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_RIGHT" marginBottom="500" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="IDL_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDL_CALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="560" y="0"/>
+    </Label>
+    <Label id="IDC_VOICE_CALL_ICON_LABEL" parent="IDL_CALL_FORM">
+        <property backgroundBitmapPath="C01-1_voice_call_icon.png" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="9" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="24" marginTop="23" mode="Portrait" rightRelation="IDL_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="70" x="626" y="23"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="24" marginTop="0" mode="Landscape" rightRelation="IDL_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="70" x="1186" y="22"/>
+    </Label>
+    <Label id="IDC_CALLER1_LABEL" parent="IDL_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="#FFFFFF" textSize="58" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="0" marginTop="24" mode="Portrait" rightRelation="IDC_VOICE_CALL_ICON_LABEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_LEFT" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="602" x="24" y="24"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_BACKGROUND_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="0" marginTop="22" mode="Landscape" rightRelation="" rightRelationType="" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="533" x="584" y="22"/>
+    </Label>
+    <Label id="IDC_CALLER1_TIME_LABEL" parent="IDL_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_RIGHT" text="Calling..." textColor="#8BF632" textSize="30" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="24" marginTop="6" mode="Portrait" rightRelation="IDL_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="160" x="536" y="99"/>
+        <layout bottomRelation="IDC_BACKGROUND_LABEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="16" marginLeft="0" marginRight="24" marginTop="0" mode="Landscape" rightRelation="IDL_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="150" x="1106" y="98"/>
+    </Label>
+    <Label id="IDC_NUMBER1_LABEL" parent="IDL_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="#FFFFFF" textSize="38" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_CALLER1_BIGPHOTO_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="24" marginTop="6" mode="Portrait" rightRelation="IDC_CALLER1_TIME_LABEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_LEFT" topRelation="" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="488" x="24" y="99"/>
+        <layout bottomRelation="IDC_BACKGROUND_LABEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_BACKGROUND_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="16" marginLeft="24" marginRight="0" marginTop="0" mode="Landscape" rightRelation="IDC_CALLER1_TIME_LABEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_LEFT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="522" x="584" y="98"/>
+    </Label>
+    <Button id="IDC_HOLD_BUTTON" parent="IDL_CALL_FORM">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="" disabledColorOpacity="100" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="C01-1_button_hold_01.png" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="C01-1_button_hold_01_press.png" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="33" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="IDC_CALLER1_BIGPHOTO_LABEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="74" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="10" marginLeft="0" marginRight="20" marginTop="0" mode="Portrait" rightRelation="IDL_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="74" x="626" y="636"/>
+        <layout bottomRelation="IDC_CALLER1_BIGPHOTO_LABEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="74" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="10" marginLeft="0" marginRight="20" marginTop="0" mode="Landscape" rightRelation="IDC_CALLER1_BIGPHOTO_LABEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="74" x="466" y="576"/>
+    </Button>
+    <Label id="IDC_HOLD_LABEL" parent="IDL_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="" backgroundColorOpacity="0" horizontalAlign="ALIGN_RIGHT" text="" textColor="#FFFFFF" textSize="36" textStyle="LABEL_TEXT_STYLE_BOLD" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="IDC_CALLER1_BIGPHOTO_LABEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="74" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="10" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDC_HOLD_BUTTON" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_LEFT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="160" x="466" y="636"/>
+        <layout bottomRelation="IDC_CALLER1_BIGPHOTO_LABEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="74" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="10" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="IDC_HOLD_BUTTON" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_LEFT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="160" x="306" y="576"/>
+    </Label>
+    <Label id="IDC_KEY_BG_LABEL" parent="IDL_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="IDL_CALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="500" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDL_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_CALLER1_BIGPHOTO_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="640"/>
+        <layout bottomRelation="IDL_CALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="500" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_CALLER1_BIGPHOTO_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_RIGHT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="160" mode="Landscape" rightRelation="IDL_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDL_CALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="560" y="160"/>
+    </Label>
+</Scene>
diff --git a/res/screen-size-normal/IDL_CALL_OPTION_POPUP.xml b/res/screen-size-normal/IDL_CALL_OPTION_POPUP.xml
new file mode 100644 (file)
index 0000000..437aee0
--- /dev/null
@@ -0,0 +1,12 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<!DOCTYPE ScenePopup SYSTEM "UIForm.dtd">
+<ScenePopup Bversion="3.0.0.201212071727" Dversion="20120315">
+    <Popup id="IDL_CALL_OPTION_POPUP">
+        <property color="" titleText="::IDS_CALL_OPTION_TITLE" titleTextColor=""/>
+        <layout height="474" mode="Portrait" style="" type="LAYOUT_RELATIVE" width="600"/>
+        <layout height="660" mode="Landscape" style="" type="LAYOUT_RELATIVE" width="414"/>
+    </Popup>
+</ScenePopup>
diff --git a/res/screen-size-normal/IDL_CONFCALL_FORM.xml b/res/screen-size-normal/IDL_CONFCALL_FORM.xml
new file mode 100644 (file)
index 0000000..58350ca
--- /dev/null
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<!DOCTYPE Scene SYSTEM "UIForm.dtd">
+
+<Scene Bversion="2.0.0.201302250946" Dversion="20120315">
+    <LogicalCoordinate>720</LogicalCoordinate>
+    <Form id="IDL_CONFCALL_FORM">
+        <property backgroundColor="#000000" backgroundColorOpacity="100" orientation="Automatic" softKey0NormalIcon="" softKey0PressedIcon="" softKey0Text="" softKey1NormalIcon="" softKey1PressedIcon="" softKey1Text="" title="" titleAlign="ALIGN_CENTER" titleIcon="" translucentFooter="false" translucentHeader="false" translucentIndicator="false"/>
+        <layout mode="Portrait" style="FORM_STYLE_INDICATOR" type="LAYOUT_RELATIVE"/>
+        <layout mode="Landscape" style="FORM_STYLE_INDICATOR" type="LAYOUT_RELATIVE"/>
+    </Form>
+    <Label id="IDC_CONFCALL_BIGPHOTO_LABEL" parent="IDL_CONFCALL_FORM">
+        <property backgroundBitmapPath="C01-1_call_group_caller ID_720x720.png" backgroundColor="" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="IDL_CONFCALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="true" centerVertical="false" height="720" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_CONFCALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="500" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="" rightRelationType="" topRelation="IDL_CONFCALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="0"/>
+        <layout bottomRelation="IDL_CONFCALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="660" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_CONFCALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="" rightRelationType="" topRelation="IDL_CONFCALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="560" x="0" y="0"/>
+    </Label>
+    <Label id="IDC_BACKGROUND_LABEL" parent="IDL_CONFCALL_FORM">
+        <property backgroundBitmapPath="C01-1_Incoming call_BG_01.png" backgroundColor="#000000" backgroundColorOpacity="50" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="160" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_CONFCALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDL_CONFCALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="0"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="160" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_CONFCALL_BIGPHOTO_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_RIGHT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="IDL_CONFCALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDL_CONFCALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="560" y="0"/>
+    </Label>
+    <Button id="IDC_CONF_CALL_MORE_BUTTON" parent="IDL_CONFCALL_FORM">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="" disabledColorOpacity="100" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="C01-1_button_more.png" normalBitmapPath="" normalColor="#FFFFFF" normalColorOpacity="0" normalTextColor="" pressedBGBitmapPath="C01-1_button_more_press.png" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="33" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="72" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="16" marginTop="0" mode="Portrait" rightRelation="IDL_CONFCALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="72" x="632" y="23"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="24" marginTop="22" mode="Landscape" rightRelation="IDL_CONFCALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDL_CONFCALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="70" x="1186" y="22"/>
+    </Button>
+    <Label id="IDC_CALLER1_LABEL" parent="IDL_CONFCALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="Conference call" textColor="#FFFFFF" textSize="64" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="69" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_CONFCALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="2" marginTop="24" mode="Portrait" rightRelation="IDC_CONF_CALL_MORE_BUTTON" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_LEFT" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="606" x="24" y="24"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_BACKGROUND_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="25" marginRight="0" marginTop="22" mode="Landscape" rightRelation="" rightRelationType="" topRelation="IDL_CONFCALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="533" x="585" y="22"/>
+    </Label>
+    <Label id="IDC_PARTICIPANTS_LABEL" parent="IDL_CONFCALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="#FFFFFF" textSize="38" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_CONFCALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="208" marginTop="6" mode="Portrait" rightRelation="IDL_CONFCALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="488" x="24" y="99"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="52" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_BACKGROUND_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="0" marginTop="6" mode="Landscape" rightRelation="" rightRelationType="" topRelation="IDC_CALLER1_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="487" x="584" y="98"/>
+    </Label>
+    <Label id="IDC_CALLER1_TIME_LABEL" parent="IDL_CONFCALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_RIGHT" text="00:00:01" textColor="#FFFFFF" textSize="30" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_PARTICIPANTS_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_RIGHT" marginBottom="0" marginLeft="0" marginRight="24" marginTop="6" mode="Portrait" rightRelation="IDL_CONFCALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="184" x="512" y="99"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="52" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="24" marginTop="0" mode="Landscape" rightRelation="IDL_CONFCALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_CONF_CALL_MORE_BUTTON" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="184" x="1072" y="92"/>
+    </Label>
+    <Button id="IDC_HOLD_BUTTON" parent="IDL_CONFCALL_FORM">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="" disabledColorOpacity="100" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="C01-1_button_hold_01.png" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="C01-1_button_press.png" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="33" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="IDC_CONFCALL_BIGPHOTO_LABEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="74" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="10" marginLeft="0" marginRight="20" marginTop="0" mode="Portrait" rightRelation="IDL_CONFCALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="78" x="622" y="636"/>
+        <layout bottomRelation="IDL_CONFCALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="74" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="10" marginLeft="0" marginRight="20" marginTop="0" mode="Landscape" rightRelation="IDC_CONFCALL_BIGPHOTO_LABEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="78" x="462" y="576"/>
+    </Button>
+    <Label id="IDC_HOLD_LABEL" parent="IDL_CONFCALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="" backgroundColorOpacity="0" horizontalAlign="ALIGN_RIGHT" text="" textColor="#FFFFFF" textSize="36" textStyle="LABEL_TEXT_STYLE_BOLD" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="IDC_CONFCALL_BIGPHOTO_LABEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="74" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="10" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDC_HOLD_BUTTON" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_LEFT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="170" x="452" y="636"/>
+        <layout bottomRelation="IDL_CONFCALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="52" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="10" marginLeft="0" marginRight="114" marginTop="0" mode="Landscape" rightRelation="IDC_CONFCALL_BIGPHOTO_LABEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="229" x="217" y="598"/>
+    </Label>
+    <Label id="IDC_KEY_BG_LABEL" parent="IDL_CONFCALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="IDL_CONFCALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="500" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_CONFCALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDL_CONFCALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_CONFCALL_BIGPHOTO_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="720"/>
+        <layout bottomRelation="IDL_CONFCALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="500" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_CONFCALL_BIGPHOTO_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_RIGHT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="IDL_CONFCALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="560" y="160"/>
+    </Label>
+</Scene>
diff --git a/res/screen-size-normal/IDL_CONFCALL_LIST_FORM.xml b/res/screen-size-normal/IDL_CONFCALL_LIST_FORM.xml
new file mode 100644 (file)
index 0000000..412f84e
--- /dev/null
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<!DOCTYPE Scene SYSTEM "UIForm.dtd">
+
+<Scene Bversion="2.0.0.201302151552" Dversion="20120315">
+    <LogicalCoordinate>720</LogicalCoordinate>
+    <Form id="IDL_CONFCALL_LIST_FORM">
+        <property backgroundColor="#FFFFFF" backgroundColorOpacity="100" orientation="Automatic" softKey0NormalIcon="" softKey0PressedIcon="" softKey0Text="" softKey1NormalIcon="" softKey1PressedIcon="" softKey1Text="" title="" titleAlign="ALIGN_CENTER" titleIcon="" translucentFooter="false" translucentHeader="false" translucentIndicator="false"/>
+        <layout mode="Portrait" style="FORM_STYLE_INDICATOR|FORM_STYLE_FOOTER" type="LAYOUT_RELATIVE"/>
+        <layout mode="Landscape" style="FORM_STYLE_INDICATOR|FORM_STYLE_FOOTER" type="LAYOUT_RELATIVE"/>
+    </Form>
+    <Footer>
+        <property backgroundBitmapPath="" color="" colorOpacity="100" disabledButtonColor="" disabledButtonColorOpacity="100" disabledButtonTextColor="" disabledItemColor="" disabledItemColorOpacity="100" disabledItemTextColor="" footerStyle="FOOTER_STYLE_BUTTON_ICON_TEXT" highlightedButtonColor="" highlightedButtonColorOpacity="100" highlightedButtonTextColor="" highlightedItemColor="" highlightedItemColorOpacity="100" highlightedItemTextColor="" normalButtonColor="" normalButtonColorOpacity="100" normalButtonTextColor="" normalItemColor="" normalItemColorOpacity="100" normalItemTextColor="" pressedButtonColor="" pressedButtonColorOpacity="100" pressedButtonTextColor="" pressedItemColor="" pressedItemColorOpacity="100" pressedItemTextColor="" selectedItemColor="" selectedItemColorOpacity="100" selectedItemTextColor="" showBackButton="false"/>
+        <itemSet/>
+    </Footer>
+    <Button id="IDC_END_CONFCALL_BUTTON" parent="IDL_CONFCALL_LIST_FORM">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="#DDDDDD" disabledColorOpacity="100" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="#000000" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="#B33C3C" normalColorOpacity="100" normalTextColor="#F9F9F9" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="#409CD3" pressedColorOpacity="100" pressedTextColor="#000000" text="End Call" textSize="48" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_TOP" centerHorizontal="false" centerVertical="false" height="112" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_CONFCALL_LIST_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="26" marginLeft="16" marginRight="16" marginTop="0" mode="Portrait" rightRelation="IDL_CONFCALL_LIST_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="688" x="16" y="968"/>
+        <layout bottomRelation="IDL_CONFCALL_LIST_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="74" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_CONFCALL_LIST_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="10" marginLeft="26" marginRight="26" marginTop="0" mode="Landscape" rightRelation="IDL_CONFCALL_LIST_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="1228" x="26" y="491"/>
+    </Button>
+    <TableView id="IDC_CONF_CALL_LIST_TABLEVIEW" parent="IDL_CONFCALL_LIST_FORM">
+        <property backgroundColor="" backgroundColorOpacity="0" fastScrollIndex="" itemDivider="true" itemDividerColor="" scrollBarStyle="TABLE_VIEW_SCROLL_BAR_STYLE_FADE_OUT" scrollInputMode="SCROLL_INPUT_MODE_ALLOW_ANY_DIRECTION" useSearchIcon="false"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="560" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_CONFCALL_LIST_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDL_CONFCALL_LIST_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_CONF_TITLE_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="108"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="224" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_CONFCALL_LIST_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="IDL_CONFCALL_LIST_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_CONF_TITLE_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="1280" x="0" y="52"/>
+    </TableView>
+    <Label id="IDC_CALL_TIME_LABEL" parent="IDL_CONFCALL_LIST_FORM">
+        <property backgroundBitmapPath="" backgroundColor="" backgroundColorOpacity="0" horizontalAlign="ALIGN_CENTER" text="01:02:30" textColor="#000000" textSize="48" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="IDC_END_CONFCALL_BUTTON" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_TOP" centerHorizontal="true" centerVertical="false" height="78" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="118" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="" rightRelationType="" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="300" x="210" y="772"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="52" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="0" marginTop="68" mode="Landscape" rightRelation="" rightRelationType="" topRelation="IDC_CONF_CALL_LIST_TABLEVIEW" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="533" x="304" y="344"/>
+    </Label>
+    <Label id="IDC_CONF_TITLE_LABEL" parent="IDL_CONFCALL_LIST_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#F8F6EF" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="CONFERENCE CALL" textColor="#3B73B6" textSize="56" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="108" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_CONFCALL_LIST_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="" rightRelationType="" topRelation="IDL_CONFCALL_LIST_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="0"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="52" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_CONFCALL_LIST_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="" rightRelationType="" topRelation="IDL_CONFCALL_LIST_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="533" x="0" y="0"/>
+    </Label>
+    <Button id="IDC_HOLD_CONFCALL_BUTTON" parent="IDL_CONFCALL_LIST_FORM">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="" disabledColorOpacity="100" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_LEFT" normalBGBitmapPath="C01-1_button_hold_normal.png" normalBitmapPath="C01-1_icon_hold_78x78.png" normalColor="#8E9BA3" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="C01-1_button_hold_press.png" pressedBitmapPath="C01-1_button_hold_press.png" pressedColor="#409CD3" pressedColorOpacity="100" pressedTextColor="" text="" textSize="33" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="IDC_END_CONFCALL_BUTTON" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_TOP" centerHorizontal="false" centerVertical="false" height="78" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="118" marginLeft="0" marginRight="40" marginTop="0" mode="Portrait" rightRelation="IDL_CONFCALL_LIST_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="78" x="602" y="772"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="74" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="26" marginTop="68" mode="Landscape" rightRelation="IDL_CONFCALL_LIST_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_CONF_CALL_LIST_TABLEVIEW" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="74" x="1180" y="344"/>
+    </Button>
+</Scene>
diff --git a/res/screen-size-normal/IDL_DTMF_KEYPAD_PANEL.xml b/res/screen-size-normal/IDL_DTMF_KEYPAD_PANEL.xml
new file mode 100644 (file)
index 0000000..4c14ba7
--- /dev/null
@@ -0,0 +1,23 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<!DOCTYPE ScenePanel SYSTEM "UIForm.dtd">
+
+<ScenePanel Bversion="2.0.0.201302250946" Dversion="20120315">
+    <Panel id="IDL_DTMF_KEYPAD_PANEL">
+        <property backgroundColor="#000000" backgroundColorOpacity="50" compositeEnabled="true" groupStyle="GROUP_STYLE_NONE"/>
+        <layout height="720" mode="Portrait" type="LAYOUT_RELATIVE" width="720" x="0" y="0"/>
+        <layout height="660" mode="Landscape" type="LAYOUT_RELATIVE" width="560" x="0" y="0"/>
+    </Panel>
+    <TextBox id="IDC_TEXTBOX" parent="IDL_DTMF_KEYPAD_PANEL">
+        <property disabledBackgroundBitmapPath="" disabledColor="#FFFFFF" disabledColorOpacity="0" disabledTextColor="" highlightedBackgroundBitmapPath="" highlightedColor="#FFFFFF" highlightedColorOpacity="0" highlightedTextColor="" lineSpacingExtra="1" lineSpacingMultiplier="1" normalBackgroundBitmapPath="" normalColor="#FFFFFF" normalColorOpacity="0" normalTextColor="#FFFFFF" text="" textAlignment="ALIGNMENT_LEFT" textSize="94" textboxBorder="TEXT_BOX_BORDER_NONE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="114" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_DTMF_KEYPAD_PANEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="35" marginRight="35" marginTop="10" mode="Portrait" rightRelation="IDL_DTMF_KEYPAD_PANEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDL_DTMF_KEYPAD_PANEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="650" x="35" y="10"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="114" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_DTMF_KEYPAD_PANEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="35" marginRight="35" marginTop="10" mode="Landscape" rightRelation="IDL_DTMF_KEYPAD_PANEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDL_DTMF_KEYPAD_PANEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="490" x="35" y="10"/>
+    </TextBox>
+    <Label id="IDC_DTMF_KEY_BG_LABEL" parent="IDL_DTMF_KEYPAD_PANEL">
+        <property backgroundBitmapPath="" backgroundColor="" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="IDL_DTMF_KEYPAD_PANEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="560" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_DTMF_KEYPAD_PANEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="20" marginLeft="35" marginRight="35" marginTop="16" mode="Portrait" rightRelation="IDL_DTMF_KEYPAD_PANEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_TEXTBOX" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="650" x="35" y="140"/>
+        <layout bottomRelation="IDL_DTMF_KEYPAD_PANEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="500" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_DTMF_KEYPAD_PANEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="20" marginLeft="35" marginRight="35" marginTop="16" mode="Landscape" rightRelation="IDL_DTMF_KEYPAD_PANEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_TEXTBOX" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="490" x="35" y="140"/>
+    </Label>
+</ScenePanel>
diff --git a/res/screen-size-normal/IDL_DTMF_KEYS_PANEL.xml b/res/screen-size-normal/IDL_DTMF_KEYS_PANEL.xml
new file mode 100644 (file)
index 0000000..3d8e07a
--- /dev/null
@@ -0,0 +1,73 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<!DOCTYPE ScenePanel SYSTEM "UIForm.dtd">
+
+<ScenePanel Bversion="2.0.0.201302250946" Dversion="20120315">
+    <Panel id="IDL_DTMF_KEYS_PANEL">
+        <property backgroundColor="#FFFFFF" backgroundColorOpacity="0" compositeEnabled="true" groupStyle="GROUP_STYLE_NONE"/>
+        <layout column1Collapsed="false" column1Shrinkable="true" column1Spacing="0" column1Stretchable="true" column2Collapsed="false" column2Shrinkable="true" column2Spacing="2" column2Stretchable="true" column3Collapsed="false" column3Shrinkable="true" column3Spacing="2" column3Stretchable="true" height="560" maxColumn="3" maxRow="4" mode="Portrait" row1Collapsed="false" row1Shrinkable="true" row1Spacing="0" row1Stretchable="true" row2Collapsed="false" row2Shrinkable="true" row2Spacing="2" row2Stretchable="true" row3Collapsed="false" row3Shrinkable="true" row3Spacing="2" row3Stretchable="true" row4Collapsed="false" row4Shrinkable="true" row4Spacing="2" row4Stretchable="true" type="LAYOUT_GRID" width="650" x="0" y="0"/>
+        <layout column1Collapsed="false" column1Shrinkable="false" column1Spacing="0" column1Stretchable="false" column2Collapsed="false" column2Shrinkable="false" column2Spacing="2" column2Stretchable="false" column3Collapsed="false" column3Shrinkable="false" column3Spacing="2" column3Stretchable="false" height="500" maxColumn="3" maxRow="5" mode="Landscape" row1Collapsed="false" row1Shrinkable="false" row1Spacing="0" row1Stretchable="false" row2Collapsed="false" row2Shrinkable="false" row2Spacing="2" row2Stretchable="false" row3Collapsed="false" row3Shrinkable="false" row3Spacing="2" row3Stretchable="false" row4Collapsed="false" row4Shrinkable="false" row4Spacing="2" row4Stretchable="false" row5Collapsed="false" row5Shrinkable="false" row5Spacing="2" row5Stretchable="false" type="LAYOUT_GRID" width="490" x="0" y="0"/>
+    </Panel>
+    <Button id="IDC_BUTTON1" parent="IDL_DTMF_KEYS_PANEL">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="" disabledColorOpacity="100" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="32" verticalAlign="ALIGN_MIDDLE"/>
+        <layout height="134" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_LEFT" marginBottom="0" marginLeft="5" marginRight="0" marginTop="5" mode="Portrait" positionColumn="0" positionColumnSpan="1" positionRow="0" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="212"/>
+        <layout height="119" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_LEFT" marginBottom="0" marginLeft="5" marginRight="0" marginTop="5" mode="Landscape" positionColumn="0" positionColumnSpan="1" positionRow="0" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="158"/>
+    </Button>
+    <Button id="IDC_BUTTON2" parent="IDL_DTMF_KEYS_PANEL">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="" disabledColorOpacity="100" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="32" verticalAlign="ALIGN_MIDDLE"/>
+        <layout height="134" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_CENTER" marginBottom="0" marginLeft="0" marginRight="0" marginTop="5" mode="Portrait" positionColumn="1" positionColumnSpan="1" positionRow="0" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="212"/>
+        <layout height="119" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_CENTER" marginBottom="0" marginLeft="0" marginRight="0" marginTop="5" mode="Landscape" positionColumn="1" positionColumnSpan="1" positionRow="0" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="158"/>
+    </Button>
+    <Button id="IDC_BUTTON3" parent="IDL_DTMF_KEYS_PANEL">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="" disabledColorOpacity="100" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="32" verticalAlign="ALIGN_MIDDLE"/>
+        <layout height="134" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_RIGHT" marginBottom="0" marginLeft="0" marginRight="5" marginTop="5" mode="Portrait" positionColumn="2" positionColumnSpan="1" positionRow="0" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="212"/>
+        <layout height="119" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_RIGHT" marginBottom="0" marginLeft="0" marginRight="5" marginTop="5" mode="Landscape" positionColumn="2" positionColumnSpan="1" positionRow="0" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="158"/>
+    </Button>
+    <Button id="IDC_BUTTON4" parent="IDL_DTMF_KEYS_PANEL">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="" disabledColorOpacity="100" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="32" verticalAlign="ALIGN_MIDDLE"/>
+        <layout height="134" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_LEFT" marginBottom="0" marginLeft="5" marginRight="0" marginTop="0" mode="Portrait" positionColumn="0" positionColumnSpan="1" positionRow="1" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="212"/>
+        <layout height="119" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_LEFT" marginBottom="0" marginLeft="5" marginRight="0" marginTop="0" mode="Landscape" positionColumn="0" positionColumnSpan="1" positionRow="1" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="158"/>
+    </Button>
+    <Button id="IDC_BUTTON5" parent="IDL_DTMF_KEYS_PANEL">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="" disabledColorOpacity="100" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="32" verticalAlign="ALIGN_MIDDLE"/>
+        <layout height="134" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_CENTER" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" positionColumn="1" positionColumnSpan="1" positionRow="1" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="212"/>
+        <layout height="119" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_CENTER" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" positionColumn="1" positionColumnSpan="1" positionRow="1" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="158"/>
+    </Button>
+    <Button id="IDC_BUTTON6" parent="IDL_DTMF_KEYS_PANEL">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="" disabledColorOpacity="100" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="32" verticalAlign="ALIGN_MIDDLE"/>
+        <layout height="134" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_RIGHT" marginBottom="0" marginLeft="0" marginRight="5" marginTop="0" mode="Portrait" positionColumn="2" positionColumnSpan="1" positionRow="1" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="212"/>
+        <layout height="119" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_RIGHT" marginBottom="0" marginLeft="0" marginRight="5" marginTop="0" mode="Landscape" positionColumn="2" positionColumnSpan="1" positionRow="1" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="158"/>
+    </Button>
+    <Button id="IDC_BUTTON7" parent="IDL_DTMF_KEYS_PANEL">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="" disabledColorOpacity="100" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="32" verticalAlign="ALIGN_MIDDLE"/>
+        <layout height="134" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_LEFT" marginBottom="0" marginLeft="5" marginRight="0" marginTop="0" mode="Portrait" positionColumn="0" positionColumnSpan="1" positionRow="2" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="212"/>
+        <layout height="119" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_LEFT" marginBottom="0" marginLeft="5" marginRight="0" marginTop="0" mode="Landscape" positionColumn="0" positionColumnSpan="1" positionRow="2" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="158"/>
+    </Button>
+    <Button id="IDC_BUTTON8" parent="IDL_DTMF_KEYS_PANEL">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="" disabledColorOpacity="100" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="32" verticalAlign="ALIGN_MIDDLE"/>
+        <layout height="134" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_CENTER" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" positionColumn="1" positionColumnSpan="1" positionRow="2" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="212"/>
+        <layout height="119" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_CENTER" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" positionColumn="1" positionColumnSpan="1" positionRow="2" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="158"/>
+    </Button>
+    <Button id="IDC_BUTTON9" parent="IDL_DTMF_KEYS_PANEL">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="" disabledColorOpacity="100" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="32" verticalAlign="ALIGN_MIDDLE"/>
+        <layout height="134" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_RIGHT" marginBottom="0" marginLeft="0" marginRight="5" marginTop="0" mode="Portrait" positionColumn="2" positionColumnSpan="1" positionRow="2" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="212"/>
+        <layout height="119" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_RIGHT" marginBottom="0" marginLeft="0" marginRight="5" marginTop="0" mode="Landscape" positionColumn="2" positionColumnSpan="1" positionRow="2" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="158"/>
+    </Button>
+    <Button id="IDC_BUTTON10" parent="IDL_DTMF_KEYS_PANEL">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="" disabledColorOpacity="100" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="32" verticalAlign="ALIGN_MIDDLE"/>
+        <layout height="134" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_LEFT" marginBottom="13" marginLeft="5" marginRight="0" marginTop="0" mode="Portrait" positionColumn="0" positionColumnSpan="1" positionRow="3" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_BOTTOM" width="212"/>
+        <layout height="119" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_LEFT" marginBottom="13" marginLeft="5" marginRight="0" marginTop="0" mode="Landscape" positionColumn="0" positionColumnSpan="1" positionRow="3" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_BOTTOM" width="158"/>
+    </Button>
+    <Button id="IDC_BUTTON11" parent="IDL_DTMF_KEYS_PANEL">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="" disabledColorOpacity="100" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="32" verticalAlign="ALIGN_MIDDLE"/>
+        <layout height="134" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_CENTER" marginBottom="13" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" positionColumn="1" positionColumnSpan="1" positionRow="3" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_BOTTOM" width="212"/>
+        <layout height="119" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_CENTER" marginBottom="13" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" positionColumn="1" positionColumnSpan="1" positionRow="3" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_BOTTOM" width="158"/>
+    </Button>
+    <Button id="IDC_BUTTON12" parent="IDL_DTMF_KEYS_PANEL">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="" disabledColorOpacity="100" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="32" verticalAlign="ALIGN_MIDDLE"/>
+        <layout height="134" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_RIGHT" marginBottom="13" marginLeft="0" marginRight="5" marginTop="0" mode="Portrait" positionColumn="2" positionColumnSpan="1" positionRow="3" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_BOTTOM" width="212"/>
+        <layout height="119" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_RIGHT" marginBottom="13" marginLeft="0" marginRight="5" marginTop="0" mode="Landscape" positionColumn="2" positionColumnSpan="1" positionRow="3" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_BOTTOM" width="158"/>
+    </Button>
+</ScenePanel>
diff --git a/res/screen-size-normal/IDL_EMERGENCY_CALL_FORM.xml b/res/screen-size-normal/IDL_EMERGENCY_CALL_FORM.xml
new file mode 100644 (file)
index 0000000..7e8a077
--- /dev/null
@@ -0,0 +1,48 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<!DOCTYPE Scene SYSTEM "UIForm.dtd">
+<Scene Bversion="3.0.0.201302121633" Dversion="20120315">
+    <LogicalCoordinate>720</LogicalCoordinate>
+    <Form id="IDL_EMERGENCY_CALL_FORM">
+        <property backgroundColor="#000000" backgroundColorOpacity="100" orientation="Portrait" softKey0NormalIcon="" softKey0PressedIcon="" softKey0Text="" softKey1NormalIcon="" softKey1PressedIcon="" softKey1Text="" title="" titleAlign="ALIGN_CENTER" titleIcon="" translucentFooter="false" translucentHeader="false" translucentIndicator="false"/>
+        <layout mode="Portrait" style="FORM_STYLE_INDICATOR" type="LAYOUT_RELATIVE"/>
+        <layout mode="Landscape" style="FORM_STYLE_INDICATOR" type="LAYOUT_RELATIVE"/>
+    </Form>
+    <Label id="IDC_CALLER1_BIGPHOTO_LABEL" parent="IDL_EMERGENCY_CALL_FORM">
+        <property backgroundBitmapPath="C01-1_end call_default_caller ID_720x720.png" backgroundColor="" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="IDL_EMERGENCY_CALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="true" centerVertical="false" height="720" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_EMERGENCY_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="500" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="" rightRelationType="" topRelation="IDL_EMERGENCY_CALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="0"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="52" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="" rightRelationType="" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="533" x="618" y="107"/>
+    </Label>
+    <Label id="IDC_BACKGROUND_LABEL" parent="IDL_EMERGENCY_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#000000" backgroundColorOpacity="50" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="162" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_EMERGENCY_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDL_EMERGENCY_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="0"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="52" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="" rightRelationType="" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="533" x="515" y="29"/>
+    </Label>
+    <Label id="IDC_LINE_LABEL" parent="IDL_EMERGENCY_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#ABF005" backgroundColorOpacity="100" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="10" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_EMERGENCY_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDL_EMERGENCY_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="0"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="52" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="" rightRelationType="" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="533" x="254" y="0"/>
+    </Label>
+    <Label id="IDC_VOICE_CALL_ICON_LABEL" parent="IDL_EMERGENCY_CALL_FORM">
+        <property backgroundBitmapPath="C01-1_voice_call_icon.png" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="9" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="24" marginTop="23" mode="Portrait" rightRelation="IDL_EMERGENCY_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="70" x="626" y="23"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="52" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="" rightRelationType="" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="533" x="512" y="431"/>
+    </Label>
+    <Label id="IDC_CALLER1_LABEL" parent="IDL_EMERGENCY_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="Emergency call" textColor="#FFFFFF" textSize="58" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="69" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_EMERGENCY_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="0" marginTop="24" mode="Portrait" rightRelation="IDC_VOICE_CALL_ICON_LABEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_LEFT" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="602" x="24" y="24"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="52" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="" rightRelationType="" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="533" x="250" y="436"/>
+    </Label>
+    <Label id="IDC_NUMBER1_LABEL" parent="IDL_EMERGENCY_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="#FFFFFF" textSize="38" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_EMERGENCY_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="208" marginTop="6" mode="Portrait" rightRelation="IDL_EMERGENCY_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="488" x="24" y="99"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="52" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="" rightRelationType="" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="533" x="376" y="428"/>
+    </Label>
+    <Label id="IDC_CALLER1_TIME_LABEL" parent="IDL_EMERGENCY_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_RIGHT" text="Calling..." textColor="#8BF632" textSize="30" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_NUMBER1_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_RIGHT" marginBottom="0" marginLeft="0" marginRight="24" marginTop="6" mode="Portrait" rightRelation="IDL_EMERGENCY_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="184" x="512" y="99"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="52" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="" rightRelationType="" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="533" x="734" y="462"/>
+    </Label>
+</Scene>
diff --git a/res/screen-size-normal/IDL_ENDCALLKEYS_PANEL.xml b/res/screen-size-normal/IDL_ENDCALLKEYS_PANEL.xml
new file mode 100644 (file)
index 0000000..aaba4fe
--- /dev/null
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<!DOCTYPE ScenePanel SYSTEM "UIForm.dtd">
+
+<ScenePanel Bversion="2.0.0.201302250946" Dversion="20120315">
+    <Panel id="IDL_ENDCALLKEYS_PANEL">
+        <property backgroundColor="#FFFFFF" backgroundColorOpacity="0" compositeEnabled="true" groupStyle="GROUP_STYLE_NONE"/>
+        <layout height="500" mode="Portrait" type="LAYOUT_RELATIVE" width="720" x="0" y="720"/>
+        <layout height="500" mode="Landscape" type="LAYOUT_RELATIVE" width="720" x="560" y="160"/>
+    </Panel>
+    <Button id="IDC_ADD_TO_CONTACT_BUTTON" parent="IDL_ENDCALLKEYS_PANEL">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="" disabledColorOpacity="100" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="33" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="IDL_ENDCALLKEYS_PANEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="122" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_ENDCALLKEYS_PANEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="214" marginLeft="10" marginRight="10" marginTop="164" mode="Portrait" rightRelation="IDL_ENDCALLKEYS_PANEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDL_ENDCALLKEYS_PANEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="700" x="10" y="164"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="122" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_ENDCALLKEYS_PANEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="10" marginRight="10" marginTop="164" mode="Landscape" rightRelation="IDL_ENDCALLKEYS_PANEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDL_ENDCALLKEYS_PANEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="700" x="10" y="164"/>
+    </Button>
+    <Button id="IDC_VIDEOCALL_BUTTON" parent="IDL_ENDCALLKEYS_PANEL">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="#FFFFFF" disabledColorOpacity="0" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="33" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="IDL_ENDCALLKEYS_PANEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="198" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_ENDCALLKEYS_PANEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="480" marginTop="16" mode="Portrait" rightRelation="IDL_ENDCALLKEYS_PANEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_ADD_TO_CONTACT_BUTTON" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="240" x="0" y="302"/>
+        <layout bottomRelation="IDL_ENDCALLKEYS_PANEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="198" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_ENDCALLKEYS_PANEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="480" marginTop="16" mode="Landscape" rightRelation="IDL_ENDCALLKEYS_PANEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_ADD_TO_CONTACT_BUTTON" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="240" x="0" y="302"/>
+    </Button>
+    <Button id="IDC_VOICECALL_BUTTON" parent="IDL_ENDCALLKEYS_PANEL">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="#FFFFFF" disabledColorOpacity="0" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="33" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="IDL_ENDCALLKEYS_PANEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="198" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_VIDEOCALL_BUTTON" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_RIGHT" marginBottom="0" marginLeft="0" marginRight="240" marginTop="16" mode="Portrait" rightRelation="IDL_ENDCALLKEYS_PANEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_ADD_TO_CONTACT_BUTTON" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="240" x="240" y="302"/>
+        <layout bottomRelation="IDL_ENDCALLKEYS_PANEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="198" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_VIDEOCALL_BUTTON" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_RIGHT" marginBottom="0" marginLeft="0" marginRight="240" marginTop="16" mode="Landscape" rightRelation="IDL_ENDCALLKEYS_PANEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_ADD_TO_CONTACT_BUTTON" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="240" x="240" y="302"/>
+    </Button>
+    <Button id="IDC_MSG_BUTTON" parent="IDL_ENDCALLKEYS_PANEL">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="#FFFFFF" disabledColorOpacity="0" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="33" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="IDL_ENDCALLKEYS_PANEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="198" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_VOICECALL_BUTTON" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_RIGHT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="16" mode="Portrait" rightRelation="IDL_ENDCALLKEYS_PANEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_ADD_TO_CONTACT_BUTTON" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="240" x="480" y="302"/>
+        <layout bottomRelation="IDL_ENDCALLKEYS_PANEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="198" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_VOICECALL_BUTTON" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_RIGHT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="16" mode="Landscape" rightRelation="IDL_ENDCALLKEYS_PANEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_ADD_TO_CONTACT_BUTTON" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="240" x="480" y="302"/>
+    </Button>
+</ScenePanel>
diff --git a/res/screen-size-normal/IDL_END_CALL_FORM.xml b/res/screen-size-normal/IDL_END_CALL_FORM.xml
new file mode 100644 (file)
index 0000000..dbd4194
--- /dev/null
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<!DOCTYPE Scene SYSTEM "UIForm.dtd">
+
+<Scene Bversion="2.0.0.201302250946" Dversion="20120315">
+    <LogicalCoordinate>720</LogicalCoordinate>
+    <Form id="IDL_END_CALL_FORM">
+        <property backgroundColor="#000000" backgroundColorOpacity="100" orientation="Automatic" softKey0NormalIcon="" softKey0PressedIcon="" softKey0Text="" softKey1NormalIcon="" softKey1PressedIcon="" softKey1Text="" title="" titleAlign="ALIGN_CENTER" titleIcon="" translucentFooter="false" translucentHeader="false" translucentIndicator="false"/>
+        <layout mode="Portrait" style="FORM_STYLE_INDICATOR" type="LAYOUT_RELATIVE"/>
+        <layout mode="Landscape" style="FORM_STYLE_INDICATOR" type="LAYOUT_RELATIVE"/>
+    </Form>
+    <Label id="IDC_CALLER1_BIGPHOTO_LABEL" parent="IDL_END_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="IDL_END_CALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="true" centerVertical="false" height="720" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_END_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="500" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDL_END_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDL_END_CALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="0"/>
+        <layout bottomRelation="IDL_END_CALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="660" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_END_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="720" marginTop="0" mode="Landscape" rightRelation="IDL_END_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDL_END_CALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="560" x="0" y="0"/>
+    </Label>
+    <Label id="IDC_BACKGROUND_LABEL" parent="IDL_END_CALL_FORM">
+        <property backgroundBitmapPath="C01-1_end call_BG_01.png" backgroundColor="#000000" backgroundColorOpacity="50" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="160" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_END_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDL_END_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="0"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="160" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_CALLER1_BIGPHOTO_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_RIGHT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="IDL_END_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDL_END_CALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="560" y="0"/>
+    </Label>
+    <Label id="IDC_CALLER1_LABEL" parent="IDL_END_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="#FFFFFF" textSize="58" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_END_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="24" marginTop="24" mode="Portrait" rightRelation="IDL_END_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="672" x="24" y="24"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_BACKGROUND_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="0" marginTop="22" mode="Landscape" rightRelation="" rightRelationType="" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="533" x="584" y="22"/>
+    </Label>
+    <Label id="IDC_CALL_TIME_LABEL" parent="IDL_END_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_RIGHT" text="Call ended" textColor="#FF4800" textSize="30" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="24" marginTop="6" mode="Portrait" rightRelation="IDL_END_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="177" x="519" y="99"/>
+        <layout bottomRelation="IDC_BACKGROUND_LABEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="16" marginLeft="0" marginRight="24" marginTop="0" mode="Landscape" rightRelation="IDL_END_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="188" x="1068" y="98"/>
+    </Label>
+    <Label id="IDC_NUMBER1_LABEL" parent="IDL_END_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="#FFFFFF" textSize="38" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_END_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="24" marginTop="6" mode="Portrait" rightRelation="IDC_CALL_TIME_LABEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_LEFT" topRelation="" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="471" x="24" y="99"/>
+        <layout bottomRelation="IDC_BACKGROUND_LABEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="52" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_BACKGROUND_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="16" marginLeft="24" marginRight="0" marginTop="0" mode="Landscape" rightRelation="" rightRelationType="" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="484" x="584" y="92"/>
+    </Label>
+    <Label id="IDC_KEY_BG_LABEL" parent="IDL_END_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="IDL_END_CALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="500" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_END_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDL_END_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_CALLER1_BIGPHOTO_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="640"/>
+        <layout bottomRelation="IDL_END_CALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="500" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_CALLER1_BIGPHOTO_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_RIGHT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="IDL_END_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="560" y="160"/>
+    </Label>
+</Scene>
diff --git a/res/screen-size-normal/IDL_ERROR_MSG_POPUP.xml b/res/screen-size-normal/IDL_ERROR_MSG_POPUP.xml
new file mode 100644 (file)
index 0000000..1549383
--- /dev/null
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<!DOCTYPE ScenePopup SYSTEM "UIForm.dtd">
+<ScenePopup Bversion="3.0.0.201301251814" Dversion="20120315">
+    <Popup id="IDL_ERROR_MSG_POPUP">
+        <property color="" titleText="" titleTextColor=""/>
+        <layout height="213" mode="Portrait" style="" type="LAYOUT_RELATIVE" width="720"/>
+        <layout height="612" mode="Landscape" style="" type="LAYOUT_RELATIVE" width="414"/>
+    </Popup>
+    <TextBox id="IDC_MSG_TEXTBOX" parent="IDL_ERROR_MSG_POPUP">
+        <property disabledBackgroundBitmapPath="" disabledColor="#FFFFFF" disabledColorOpacity="0" disabledTextColor="" highlightedBackgroundBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" lineSpacingExtra="1" lineSpacingMultiplier="1" normalBackgroundBitmapPath="" normalColor="#FFFFFF" normalColorOpacity="0" normalTextColor="" text="" textAlignment="" textSize="42" textboxBorder="TEXT_BOX_BORDER_NONE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="true" centerVertical="true" height="54" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="" rightRelationType="" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="648" x="16" y="79"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="498" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="" rightRelationType="" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="58" x="33" y="30"/>
+    </TextBox>
+</ScenePopup>
diff --git a/res/screen-size-normal/IDL_INCOMING_CALL_FORM.xml b/res/screen-size-normal/IDL_INCOMING_CALL_FORM.xml
new file mode 100644 (file)
index 0000000..5929881
--- /dev/null
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<!DOCTYPE Scene SYSTEM "UIForm.dtd">
+
+<Scene Bversion="2.0.0.201303041025" Dversion="20120315">
+    <LogicalCoordinate>720</LogicalCoordinate>
+    <Form id="IDL_INCOMING_CALL_FORM">
+        <property backgroundColor="#000000" backgroundColorOpacity="100" orientation="Portrait" softKey0NormalIcon="" softKey0PressedIcon="" softKey0Text="" softKey1NormalIcon="" softKey1PressedIcon="" softKey1Text="" title="" titleAlign="ALIGN_CENTER" titleIcon="" translucentFooter="false" translucentHeader="false" translucentIndicator="false"/>
+        <layout mode="Portrait" style="FORM_STYLE_INDICATOR|FORM_STYLE_FOOTER" type="LAYOUT_RELATIVE"/>
+        <layout mode="Landscape" style="FORM_STYLE_INDICATOR|FORM_STYLE_FOOTER" type="LAYOUT_RELATIVE"/>
+    </Form>
+    <Footer>
+        <property backgroundBitmapPath="" color="" colorOpacity="100" disabledButtonColor="" disabledButtonColorOpacity="100" disabledButtonTextColor="" disabledItemColor="" disabledItemColorOpacity="100" disabledItemTextColor="" footerStyle="FOOTER_STYLE_TAB" highlightedButtonColor="" highlightedButtonColorOpacity="100" highlightedButtonTextColor="" highlightedItemColor="" highlightedItemColorOpacity="100" highlightedItemTextColor="" normalButtonColor="" normalButtonColorOpacity="100" normalButtonTextColor="" normalItemColor="" normalItemColorOpacity="100" normalItemTextColor="" pressedButtonColor="" pressedButtonColorOpacity="100" pressedButtonTextColor="" pressedItemColor="" pressedItemColorOpacity="100" pressedItemTextColor="" selectedItemColor="" selectedItemColorOpacity="100" selectedItemTextColor="" showBackButton="false"/>
+        <itemSet/>
+    </Footer>
+    <Label id="IDC_BIG_PHOTO_LABEL" parent="IDL_INCOMING_CALL_FORM">
+        <property backgroundBitmapPath="C01-1_call_default_caller ID_720x720.png" backgroundColor="" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="true" centerVertical="false" height="720" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_INCOMING_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="420" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="" rightRelationType="" topRelation="IDL_INCOMING_CALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="0"/>
+        <layout bottomRelation="IDL_INCOMING_CALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="575" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_INCOMING_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="280" marginRight="280" marginTop="0" mode="Landscape" rightRelation="IDL_INCOMING_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDL_INCOMING_CALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="280" y="0"/>
+    </Label>
+    <Label id="IDC_BACKGROUND_LABEL" parent="IDL_INCOMING_CALL_FORM">
+        <property backgroundBitmapPath="C01-1_Incoming call_BG_01.png" backgroundColor="#000000" backgroundColorOpacity="50" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="160" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_INCOMING_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDL_INCOMING_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="0"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="160" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_BIG_PHOTO_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="IDC_BIG_PHOTO_LABEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_BIG_PHOTO_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="280" y="0"/>
+    </Label>
+    <Label id="IDC_VOICE_CALL_ICON_LABEL" parent="IDL_INCOMING_CALL_FORM">
+        <property backgroundBitmapPath="C01-1_voice_call_icon.png" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="9" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="24" marginTop="23" mode="Portrait" rightRelation="IDL_INCOMING_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="70" x="626" y="23"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="24" marginTop="22" mode="Landscape" rightRelation="IDC_BIG_PHOTO_LABEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_BIG_PHOTO_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="70" x="906" y="22"/>
+    </Label>
+    <Label id="IDC_CALLER_LABEL" parent="IDL_INCOMING_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="#FFFFFF" textSize="58" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="69" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_INCOMING_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="0" marginTop="24" mode="Portrait" rightRelation="IDC_VOICE_CALL_ICON_LABEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_LEFT" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="602" x="24" y="24"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_BACKGROUND_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="0" marginTop="22" mode="Landscape" rightRelation="" rightRelationType="" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="533" x="304" y="22"/>
+    </Label>
+    <Label id="IDC_NUMBER_LABEL" parent="IDL_INCOMING_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="#FFFFFF" textSize="38" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_INCOMING_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="208" marginTop="6" mode="Portrait" rightRelation="IDL_INCOMING_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_CALLER_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="488" x="24" y="99"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="52" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_BIG_PHOTO_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="0" marginTop="6" mode="Landscape" rightRelation="" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_LEFT" topRelation="IDC_CALLER_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="520" x="304" y="98"/>
+    </Label>
+    <Label id="IDC_CALL_TIME_LABEL" parent="IDL_INCOMING_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_RIGHT" text="::IDS_INCOMING_CALLING" textColor="#8BF632" textSize="30" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_NUMBER_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_RIGHT" marginBottom="0" marginLeft="0" marginRight="24" marginTop="6" mode="Portrait" rightRelation="IDL_INCOMING_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_CALLER_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="184" x="512" y="99"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="52" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="24" marginTop="6" mode="Landscape" rightRelation="IDC_BIG_PHOTO_LABEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_VOICE_CALL_ICON_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="152" x="824" y="98"/>
+    </Label>
+    <Panel id="IDC_REJECT_PANEL" parent="IDL_INCOMING_CALL_FORM">
+        <property backgroundColor="" backgroundColorOpacity="0" compositeEnabled="true" groupStyle="GROUP_STYLE_NONE"/>
+        <layout bottomRelation="IDL_INCOMING_CALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="310" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_INCOMING_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDL_INCOMING_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="" type="LAYOUT_RELATIVE" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="812"/>
+        <layout bottomRelation="IDL_INCOMING_CALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="310" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_INCOMING_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="IDL_INCOMING_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="" type="LAYOUT_RELATIVE" verticalFitPolicy="FIT_POLICY_FIXED" width="1280" x="0" y="265"/>
+    </Panel>
+    <Button id="IDC_REJECT_MESSAGE_CANCEL_BUTTON" parent="IDC_REJECT_PANEL">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBGBitmapPath="" disabledBitmapPath="" disabledColor="" disabledColorOpacity="100" highlightedBGBitmapPath="" highlightedBitmapPath="" highlightedBitmapX="0" highlightedBitmapY="0" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="#F9F9F9" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="28" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="110" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_REJECT_PANEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="200" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDC_REJECT_PANEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_REJECT_PANEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="0"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="110" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_REJECT_PANEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="IDC_REJECT_PANEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="1280" x="0" y="0"/>
+    </Button>
+    <TableView id="IDC_MSG_TABLEVIEW" parent="IDC_REJECT_PANEL">
+        <property backgroundColor="#F8F6EF" backgroundColorOpacity="100" fastScrollIndex="" itemDivider="true" itemDividerColor="" scrollBarStyle="TABLE_VIEW_SCROLL_BAR_STYLE_FADE_OUT" scrollInputMode="SCROLL_INPUT_MODE_ALLOW_ANY_DIRECTION" useSearchIcon="false"/>
+        <layout bottomRelation="IDC_REJECT_PANEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="200" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_REJECT_PANEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDC_REJECT_PANEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_REJECT_MESSAGE_CANCEL_BUTTON" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="110"/>
+        <layout bottomRelation="IDC_REJECT_PANEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="200" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_REJECT_PANEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="IDC_REJECT_PANEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_REJECT_MESSAGE_CANCEL_BUTTON" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="1280" x="0" y="110"/>
+    </TableView>
+    <Button id="IDC_REJECT_MESSAGE_BUTTON" parent="IDL_INCOMING_CALL_FORM">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBGBitmapPath="" disabledBitmapPath="" disabledColor="" disabledColorOpacity="100" highlightedBGBitmapPath="" highlightedBitmapPath="" highlightedBitmapX="0" highlightedBitmapY="0" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="#F9F9F9" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="28" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="IDL_INCOMING_CALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="110" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_INCOMING_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDL_INCOMING_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="1012"/>
+        <layout bottomRelation="IDL_INCOMING_CALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="110" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_INCOMING_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="IDL_INCOMING_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="1280" x="0" y="465"/>
+    </Button>
+</Scene>
diff --git a/res/screen-size-normal/IDL_KEYS_PANEL.xml b/res/screen-size-normal/IDL_KEYS_PANEL.xml
new file mode 100644 (file)
index 0000000..74b6aa7
--- /dev/null
@@ -0,0 +1,43 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<!DOCTYPE ScenePanel SYSTEM "UIForm.dtd">
+
+<ScenePanel Bversion="2.0.0.201302250946" Dversion="20120315">
+    <Panel id="IDL_KEYS_PANEL">
+        <property backgroundColor="#FFFFFF" backgroundColorOpacity="0" compositeEnabled="true" groupStyle="GROUP_STYLE_NONE"/>
+        <layout column1Collapsed="false" column1Shrinkable="true" column1Spacing="0" column1Stretchable="true" column2Collapsed="false" column2Shrinkable="true" column2Spacing="0" column2Stretchable="true" column3Collapsed="false" column3Shrinkable="true" column3Spacing="0" column3Stretchable="true" height="500" maxColumn="3" maxRow="2" mode="Portrait" row1Collapsed="false" row1Shrinkable="true" row1Spacing="0" row1Stretchable="true" row2Collapsed="false" row2Shrinkable="true" row2Spacing="0" row2Stretchable="true" type="LAYOUT_GRID" width="720" x="0" y="0"/>
+        <layout column1Collapsed="false" column1Shrinkable="true" column1Spacing="0" column1Stretchable="true" column2Collapsed="false" column2Shrinkable="true" column2Spacing="0" column2Stretchable="true" column3Collapsed="false" column3Shrinkable="true" column3Spacing="0" column3Stretchable="true" height="500" maxColumn="3" maxRow="2" mode="Landscape" row1Collapsed="false" row1Shrinkable="true" row1Spacing="0" row1Stretchable="true" row2Collapsed="false" row2Shrinkable="true" row2Spacing="0" row2Stretchable="true" type="LAYOUT_GRID" width="720" x="0" y="0"/>
+    </Panel>
+    <Button id="IDC_ADDJOINCALL_BUTTON" parent="IDL_KEYS_PANEL">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="#FFFFFF" disabledColorOpacity="0" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="33" verticalAlign="ALIGN_MIDDLE"/>
+        <layout height="250" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" positionColumn="0" positionColumnSpan="1" positionRow="0" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="240"/>
+        <layout height="250" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" positionColumn="0" positionColumnSpan="1" positionRow="0" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="240"/>
+    </Button>
+    <Button id="IDC_KEYPAD_BUTTON" parent="IDL_KEYS_PANEL">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="#FFFFFF" disabledColorOpacity="0" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="33" verticalAlign="ALIGN_MIDDLE"/>
+        <layout height="250" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_CENTER" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" positionColumn="1" positionColumnSpan="1" positionRow="0" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="240"/>
+        <layout height="250" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_CENTER" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" positionColumn="1" positionColumnSpan="1" positionRow="0" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="240"/>
+    </Button>
+    <Button id="IDC_ENDCALL_BUTTON" parent="IDL_KEYS_PANEL">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="#FFFFFF" disabledColorOpacity="0" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="33" verticalAlign="ALIGN_MIDDLE"/>
+        <layout height="250" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_RIGHT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" positionColumn="2" positionColumnSpan="1" positionRow="0" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="240"/>
+        <layout height="250" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_RIGHT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" positionColumn="2" positionColumnSpan="1" positionRow="0" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="240"/>
+    </Button>
+    <Button id="IDC_SPEAKER_BUTTON" parent="IDL_KEYS_PANEL">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="#FFFFFF" disabledColorOpacity="0" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="33" verticalAlign="ALIGN_MIDDLE"/>
+        <layout height="250" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" positionColumn="0" positionColumnSpan="1" positionRow="1" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="240"/>
+        <layout height="250" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" positionColumn="0" positionColumnSpan="1" positionRow="1" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="240"/>
+    </Button>
+    <Button id="IDC_MUTE_BUTTON" parent="IDL_KEYS_PANEL">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="#FFFFFF" disabledColorOpacity="0" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="33" verticalAlign="ALIGN_MIDDLE"/>
+        <layout height="250" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_CENTER" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" positionColumn="1" positionColumnSpan="1" positionRow="1" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="240"/>
+        <layout height="250" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_CENTER" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" positionColumn="1" positionColumnSpan="1" positionRow="1" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="240"/>
+    </Button>
+    <Button id="IDC_CONTACT_BUTTON" parent="IDL_KEYS_PANEL">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="#FFFFFF" disabledColorOpacity="0" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="33" verticalAlign="ALIGN_MIDDLE"/>
+        <layout height="250" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_RIGHT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" positionColumn="2" positionColumnSpan="1" positionRow="1" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="240"/>
+        <layout height="250" horizontalAlignment="LAYOUT_HORIZONTAL_ALIGN_RIGHT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" positionColumn="2" positionColumnSpan="1" positionRow="1" positionRowSpan="1" verticalAlignment="LAYOUT_VERTICAL_ALIGN_TOP" width="240"/>
+    </Button>
+</ScenePanel>
diff --git a/res/screen-size-normal/IDL_MULTIPLE_CALL_FORM.xml b/res/screen-size-normal/IDL_MULTIPLE_CALL_FORM.xml
new file mode 100644 (file)
index 0000000..10b5fad
--- /dev/null
@@ -0,0 +1,89 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<!DOCTYPE Scene SYSTEM "UIForm.dtd">
+
+<Scene Bversion="2.0.0.201302250946" Dversion="20120315">
+    <LogicalCoordinate>720</LogicalCoordinate>
+    <Form id="IDL_MULTIPLE_CALL_FORM">
+        <property backgroundColor="#000000" backgroundColorOpacity="100" orientation="Automatic" softKey0NormalIcon="" softKey0PressedIcon="" softKey0Text="" softKey1NormalIcon="" softKey1PressedIcon="" softKey1Text="" title="" titleAlign="ALIGN_CENTER" titleIcon="" translucentFooter="false" translucentHeader="false" translucentIndicator="false"/>
+        <layout mode="Portrait" style="FORM_STYLE_INDICATOR" type="LAYOUT_RELATIVE"/>
+        <layout mode="Landscape" style="FORM_STYLE_INDICATOR" type="LAYOUT_RELATIVE"/>
+    </Form>
+    <Label id="IDC_CALLER1_PHOTO_LABEL" parent="IDL_MULTIPLE_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="true" centerVertical="false" height="350" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_MULTIPLE_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDL_MULTIPLE_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDL_MULTIPLE_CALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="0"/>
+        <layout bottomRelation="IDL_MULTIPLE_CALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="330" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_MULTIPLE_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="330" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="" rightRelationType="" topRelation="IDL_MULTIPLE_CALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="550" x="0" y="0"/>
+    </Label>
+    <Label id="IDC_BACKGROUND_LABEL" parent="IDL_MULTIPLE_CALL_FORM">
+        <property backgroundBitmapPath="C01-1_Incoming call_BG_01.png" backgroundColor="#000000" backgroundColorOpacity="50" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="160" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_MULTIPLE_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDL_MULTIPLE_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="0"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="160" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_CALLER1_PHOTO_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_RIGHT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="IDL_MULTIPLE_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDL_MULTIPLE_CALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="730" x="550" y="0"/>
+    </Label>
+    <Label id="IDC_CALLER1_LABEL" parent="IDL_MULTIPLE_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="#FFFFFF" textSize="58" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="69" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_MULTIPLE_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="94" marginTop="24" mode="Portrait" rightRelation="IDL_MULTIPLE_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="602" x="24" y="24"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_BACKGROUND_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="0" marginTop="22" mode="Landscape" rightRelation="" rightRelationType="" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="629" x="574" y="22"/>
+    </Label>
+    <Label id="IDC_NUMBER1_LABEL" parent="IDL_MULTIPLE_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="#FFFFFF" textSize="38" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_MULTIPLE_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="208" marginTop="6" mode="Portrait" rightRelation="IDL_MULTIPLE_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="488" x="24" y="99"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="52" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_BACKGROUND_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="0" marginTop="6" mode="Landscape" rightRelation="" rightRelationType="" topRelation="IDC_CALLER1_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="513" x="574" y="98"/>
+    </Label>
+    <Label id="IDC_VOICE_CALL_ICON_LABEL" parent="IDL_MULTIPLE_CALL_FORM">
+        <property backgroundBitmapPath="C01-1_voice_call_icon.png" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="9" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="24" marginTop="23" mode="Portrait" rightRelation="IDL_MULTIPLE_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="70" x="626" y="23"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="24" marginTop="22" mode="Landscape" rightRelation="IDL_MULTIPLE_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDL_MULTIPLE_CALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="70" x="1186" y="22"/>
+    </Label>
+    <Button id="IDC_CONF_CALL_MORE_BUTTON" parent="IDL_MULTIPLE_CALL_FORM">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="" disabledColorOpacity="100" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="C01-1_button_more.png" normalBitmapPath="" normalColor="#FFFFFF" normalColorOpacity="0" normalTextColor="" pressedBGBitmapPath="C01-1_icon_more_press.png" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="33" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="72" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="16" marginTop="0" mode="Portrait" rightRelation="IDL_MULTIPLE_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="72" x="632" y="23"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="24" marginTop="22" mode="Landscape" rightRelation="IDL_MULTIPLE_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDL_MULTIPLE_CALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="70" x="1186" y="22"/>
+    </Button>
+    <Label id="IDC_CALLER1_TIME_LABEL" parent="IDL_MULTIPLE_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_RIGHT" text="00:01:24" textColor="#8BF632" textSize="30" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_NUMBER1_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_RIGHT" marginBottom="0" marginLeft="0" marginRight="24" marginTop="6" mode="Portrait" rightRelation="IDL_MULTIPLE_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="184" x="512" y="99"/>
+        <layout bottomRelation="IDC_BACKGROUND_LABEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="16" marginLeft="0" marginRight="24" marginTop="6" mode="Landscape" rightRelation="IDL_MULTIPLE_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_VOICE_CALL_ICON_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="184" x="1072" y="98"/>
+    </Label>
+    <Label id="IDC_CALLER2_PHOTO_LABEL" parent="IDL_MULTIPLE_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="#FFFFFF" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="IDL_MULTIPLE_CALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="390" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_MULTIPLE_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="480" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDL_MULTIPLE_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_CALLER1_PHOTO_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="350"/>
+        <layout bottomRelation="IDL_MULTIPLE_CALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="330" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_MULTIPLE_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="330" mode="Landscape" rightRelation="" rightRelationType="" topRelation="IDL_MULTIPLE_CALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="550" x="0" y="330"/>
+    </Label>
+    <Label id="IDC_BACKGROUND_LABEL2" parent="IDL_MULTIPLE_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#000000" backgroundColorOpacity="50" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="162" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_MULTIPLE_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="" rightRelationType="" topRelation="IDC_CALLER2_PHOTO_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="350"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="160" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_MULTIPLE_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="" rightRelationType="" topRelation="IDC_CALLER2_PHOTO_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="550" x="0" y="330"/>
+    </Label>
+    <Label id="IDC_CALLER2_TIME_LABEL" parent="IDL_MULTIPLE_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="" backgroundColorOpacity="0" horizontalAlign="ALIGN_RIGHT" text="on hold" textColor="#FFFFFF" textSize="30" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_RIGHT" marginBottom="0" marginLeft="0" marginRight="24" marginTop="0" mode="Portrait" rightRelation="IDL_MULTIPLE_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="184" x="512" y="449"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="52" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="IDC_BACKGROUND_LABEL2" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_BACKGROUND_LABEL2" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="151" x="399" y="330"/>
+    </Label>
+    <Label id="IDC_CALLER2_LABEL" parent="IDL_MULTIPLE_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="#FFFFFF" textSize="58" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="69" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_BACKGROUND_LABEL2" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="0" marginTop="24" mode="Portrait" rightRelation="" rightRelationType="" topRelation="IDC_BACKGROUND_LABEL2" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="680" x="24" y="374"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_MULTIPLE_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="IDC_CALLER2_TIME_LABEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_LEFT" topRelation="IDC_BACKGROUND_LABEL2" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="399" x="0" y="330"/>
+    </Label>
+    <Label id="IDC_NUMBER2_LABEL" parent="IDL_MULTIPLE_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="#FFFFFF" textSize="38" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_BACKGROUND_LABEL2" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="208" marginTop="6" mode="Portrait" rightRelation="IDL_MULTIPLE_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_CALLER2_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="488" x="24" y="449"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="52" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_MULTIPLE_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="IDC_CALLER2_TIME_LABEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_LEFT" topRelation="IDC_CALLER2_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="399" x="0" y="400"/>
+    </Label>
+    <Button id="IDC_SWAP_BUTTON" parent="IDL_MULTIPLE_CALL_FORM">
+        <property DisabledBitmapX="0" DisabledBitmapY="0" NormalBitmapX="0" NormalBitmapY="0" PressedBitmapX="0" PressedBitmapY="0" disableTextColor="" disabledBitmapPath="" disabledColor="" disabledColorOpacity="100" highlightedBGBitmapPath="" highlightedColor="" highlightedColorOpacity="100" highlightedTextColor="" horizontalAlign="ALIGN_CENTER" normalBGBitmapPath="C01-1_button_hold_normal_01.png" normalBitmapPath="" normalColor="" normalColorOpacity="100" normalTextColor="" pressedBGBitmapPath="C01-1_button_hold_normal_01_press.png" pressedBitmapPath="" pressedColor="" pressedColorOpacity="100" pressedTextColor="" text="" textSize="33" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="IDC_CALLER2_PHOTO_LABEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="78" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="15" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="" rightRelationType="" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="78" x="458" y="647"/>
+        <layout bottomRelation="IDC_CALLER2_PHOTO_LABEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="78" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="20" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_LEFT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="78" x="285" y="562"/>
+    </Button>
+    <Label id="IDC_SWAP_LABEL" parent="IDL_MULTIPLE_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="" backgroundColorOpacity="0" horizontalAlign="ALIGN_CENTER" text="Swap" textColor="#FFFFFF" textSize="36" textStyle="LABEL_TEXT_STYLE_BOLD" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="78" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_SWAP_BUTTON" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_RIGHT" marginBottom="0" marginLeft="0" marginRight="14" marginTop="0" mode="Portrait" rightRelation="IDL_MULTIPLE_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_SWAP_BUTTON" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="170" x="536" y="647"/>
+        <layout bottomRelation="IDC_CALLER2_PHOTO_LABEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="78" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="20" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="IDC_CALLER2_PHOTO_LABEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="170" x="380" y="562"/>
+    </Label>
+    <Label id="IDC_KEY_BG_LABEL" parent="IDL_MULTIPLE_CALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="IDL_MULTIPLE_CALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="480" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_MULTIPLE_CALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDL_MULTIPLE_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_CALLER2_PHOTO_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="740"/>
+        <layout bottomRelation="IDL_MULTIPLE_CALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="500" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_CALLER1_PHOTO_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_RIGHT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="IDL_MULTIPLE_CALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="730" x="550" y="160"/>
+    </Label>
+</Scene>
diff --git a/res/screen-size-normal/IDL_OUTCALL_FORM.xml b/res/screen-size-normal/IDL_OUTCALL_FORM.xml
new file mode 100644 (file)
index 0000000..8d0efbe
--- /dev/null
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<!DOCTYPE Scene SYSTEM "UIForm.dtd">
+
+<Scene Bversion="2.0.0.201302250946" Dversion="20120315">
+    <LogicalCoordinate>720</LogicalCoordinate>
+    <Form id="IDL_OUTCALL_FORM">
+        <property backgroundColor="#000000" backgroundColorOpacity="100" orientation="Automatic" softKey0NormalIcon="" softKey0PressedIcon="" softKey0Text="" softKey1NormalIcon="" softKey1PressedIcon="" softKey1Text="" title="" titleAlign="ALIGN_CENTER" titleIcon="" translucentFooter="false" translucentHeader="false" translucentIndicator="false"/>
+        <layout mode="Portrait" style="FORM_STYLE_INDICATOR" type="LAYOUT_RELATIVE"/>
+        <layout mode="Landscape" style="FORM_STYLE_INDICATOR" type="LAYOUT_RELATIVE"/>
+    </Form>
+    <Label id="IDC_CALLER1_BIGPHOTO_LABEL" parent="IDL_OUTCALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="IDL_OUTCALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="true" centerVertical="false" height="720" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_OUTCALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="500" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="" rightRelationType="" topRelation="IDL_OUTCALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="0"/>
+        <layout bottomRelation="IDL_OUTCALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="660" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_OUTCALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="" rightRelationType="" topRelation="IDL_OUTCALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="560" x="0" y="0"/>
+    </Label>
+    <Label id="IDC_BACKGROUND_LABEL" parent="IDL_OUTCALL_FORM">
+        <property backgroundBitmapPath="C01-1_Incoming call_BG_01.png" backgroundColor="#000000" backgroundColorOpacity="50" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="160" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_OUTCALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDL_OUTCALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="0"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="160" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_CALLER1_BIGPHOTO_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_RIGHT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="IDL_OUTCALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDL_OUTCALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="560" y="0"/>
+    </Label>
+    <Label id="IDC_VOICE_CALL_ICON_LABEL" parent="IDL_OUTCALL_FORM">
+        <property backgroundBitmapPath="C01-1_voice_call_icon.png" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="9" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="24" marginTop="23" mode="Portrait" rightRelation="IDL_OUTCALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="70" x="626" y="23"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="24" marginTop="22" mode="Landscape" rightRelation="IDL_OUTCALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDL_OUTCALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="70" x="1186" y="22"/>
+    </Label>
+    <Label id="IDC_CALLER1_LABEL" parent="IDL_OUTCALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="#FFFFFF" textSize="58" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="69" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_OUTCALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="0" marginTop="24" mode="Portrait" rightRelation="IDC_VOICE_CALL_ICON_LABEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_LEFT" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="602" x="24" y="24"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_BACKGROUND_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="0" marginTop="22" mode="Landscape" rightRelation="" rightRelationType="" topRelation="IDL_OUTCALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="533" x="584" y="22"/>
+    </Label>
+    <Label id="IDC_CALLER1_TIME_LABEL" parent="IDL_OUTCALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_RIGHT" text="Calling..." textColor="#8BF632" textSize="30" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="24" marginTop="6" mode="Portrait" rightRelation="IDL_OUTCALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="142" x="554" y="99"/>
+        <layout bottomRelation="IDC_BACKGROUND_LABEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="16" marginLeft="0" marginRight="24" marginTop="0" mode="Landscape" rightRelation="IDL_OUTCALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="172" x="1084" y="74"/>
+    </Label>
+    <Label id="IDC_NUMBER1_LABEL" parent="IDL_OUTCALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="#FFFFFF" textSize="38" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_OUTCALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="24" marginTop="6" mode="Portrait" rightRelation="IDC_CALLER1_TIME_LABEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_LEFT" topRelation="" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="506" x="24" y="99"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_BACKGROUND_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="0" marginTop="6" mode="Landscape" rightRelation="" rightRelationType="" topRelation="IDC_CALLER1_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="484" x="584" y="98"/>
+    </Label>
+    <Label id="IDC_KEY_BG_LABEL" parent="IDL_OUTCALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="IDL_OUTCALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="500" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_OUTCALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="IDL_OUTCALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_CALLER1_BIGPHOTO_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="720"/>
+        <layout bottomRelation="IDL_OUTCALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="500" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_CALLER1_BIGPHOTO_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_RIGHT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="IDL_OUTCALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="560" y="160"/>
+    </Label>
+</Scene>
diff --git a/res/screen-size-normal/IDL_OUT_EMERGENCYCALL_FORM.xml b/res/screen-size-normal/IDL_OUT_EMERGENCYCALL_FORM.xml
new file mode 100644 (file)
index 0000000..58d075f
--- /dev/null
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+       This XML file was automatically generated by UiBuilder - do not modify by hand.
+-->
+<!DOCTYPE Scene SYSTEM "UIForm.dtd">
+
+<Scene Bversion="2.0.0.201302250946" Dversion="20120315">
+    <LogicalCoordinate>720</LogicalCoordinate>
+    <Form id="IDL_OUT_EMERGENCYCALL_FORM">
+        <property backgroundColor="#000000" backgroundColorOpacity="100" orientation="Portrait" softKey0NormalIcon="" softKey0PressedIcon="" softKey0Text="" softKey1NormalIcon="" softKey1PressedIcon="" softKey1Text="" title="" titleAlign="ALIGN_CENTER" titleIcon="" translucentFooter="false" translucentHeader="false" translucentIndicator="false"/>
+        <layout mode="Portrait" style="FORM_STYLE_INDICATOR" type="LAYOUT_RELATIVE"/>
+        <layout mode="Landscape" style="FORM_STYLE_INDICATOR" type="LAYOUT_RELATIVE"/>
+    </Form>
+    <Label id="IDC_CALLER1_BIGPHOTO_LABEL" parent="IDL_OUT_EMERGENCYCALL_FORM">
+        <property backgroundBitmapPath="C01-1_call_default_caller ID_720x720.png" backgroundColor="" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="true" centerVertical="false" height="720" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="500" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="" rightRelationType="" topRelation="" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="0"/>
+        <layout bottomRelation="IDL_OUTCALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="660" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDL_OUTCALL_FORM" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="" rightRelationType="" topRelation="IDL_OUTCALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="560" x="0" y="0"/>
+    </Label>
+    <Label id="IDC_BACKGROUND_LABEL" parent="IDL_OUT_EMERGENCYCALL_FORM">
+        <property backgroundBitmapPath="C01-1_Incoming call_BG_01.png" backgroundColor="#000000" backgroundColorOpacity="50" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="160" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="0"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="160" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="IDL_OUTCALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDL_OUTCALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="560" y="0"/>
+    </Label>
+    <Label id="IDC_VOICE_CALL_ICON_LABEL" parent="IDL_OUT_EMERGENCYCALL_FORM">
+        <property backgroundBitmapPath="C01-1_voice_call_icon.png" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="9" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="24" marginTop="23" mode="Portrait" rightRelation="" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="70" x="626" y="23"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="24" marginTop="22" mode="Landscape" rightRelation="IDL_OUTCALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDL_OUTCALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="70" x="1186" y="22"/>
+    </Label>
+    <Label id="IDC_CALLER1_LABEL" parent="IDL_OUT_EMERGENCYCALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="#FFFFFF" textSize="58" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="69" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="0" marginTop="24" mode="Portrait" rightRelation="IDC_VOICE_CALL_ICON_LABEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_LEFT" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="602" x="24" y="24"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_BACKGROUND_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="0" marginTop="22" mode="Landscape" rightRelation="" rightRelationType="" topRelation="IDL_OUTCALL_FORM" topRelationType="RECT_EDGE_RELATION_TOP_TO_TOP" verticalFitPolicy="FIT_POLICY_FIXED" width="533" x="584" y="22"/>
+    </Label>
+    <Label id="IDC_CALLER1_TIME_LABEL" parent="IDL_OUT_EMERGENCYCALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_RIGHT" text="Calling..." textColor="#8BF632" textSize="30" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="0" marginLeft="0" marginRight="24" marginTop="6" mode="Portrait" rightRelation="" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="142" x="554" y="99"/>
+        <layout bottomRelation="IDC_BACKGROUND_LABEL" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="70" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="" marginBottom="16" marginLeft="0" marginRight="24" marginTop="0" mode="Landscape" rightRelation="IDL_OUTCALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="" topRelationType="" verticalFitPolicy="FIT_POLICY_FIXED" width="172" x="1084" y="74"/>
+    </Label>
+    <Label id="IDC_NUMBER1_LABEL" parent="IDL_OUT_EMERGENCYCALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="#FFFFFF" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="#FFFFFF" textSize="38" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_MIDDLE"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="24" marginTop="6" mode="Portrait" rightRelation="IDC_CALLER1_TIME_LABEL" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_LEFT" topRelation="" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="506" x="24" y="99"/>
+        <layout bottomRelation="" bottomRelationType="" centerHorizontal="false" centerVertical="false" height="46" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_BACKGROUND_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="24" marginRight="0" marginTop="6" mode="Landscape" rightRelation="" rightRelationType="" topRelation="IDC_CALLER1_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="484" x="584" y="98"/>
+    </Label>
+    <Label id="IDC_KEY_BG_LABEL" parent="IDL_OUT_EMERGENCYCALL_FORM">
+        <property backgroundBitmapPath="" backgroundColor="" backgroundColorOpacity="0" horizontalAlign="ALIGN_LEFT" text="" textColor="" textSize="33" textStyle="LABEL_TEXT_STYLE_NORMAL" verticalAlign="ALIGN_TOP"/>
+        <layout bottomRelation="" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="500" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_LEFT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Portrait" rightRelation="" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_CALLER1_BIGPHOTO_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="0" y="720"/>
+        <layout bottomRelation="IDL_OUTCALL_FORM" bottomRelationType="RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM" centerHorizontal="false" centerVertical="false" height="500" horizontalFitPolicy="FIT_POLICY_FIXED" leftRelation="IDC_CALLER1_BIGPHOTO_LABEL" leftRelationType="RECT_EDGE_RELATION_LEFT_TO_RIGHT" marginBottom="0" marginLeft="0" marginRight="0" marginTop="0" mode="Landscape" rightRelation="IDL_OUTCALL_FORM" rightRelationType="RECT_EDGE_RELATION_RIGHT_TO_RIGHT" topRelation="IDC_BACKGROUND_LABEL" topRelationType="RECT_EDGE_RELATION_TOP_TO_BOTTOM" verticalFitPolicy="FIT_POLICY_FIXED" width="720" x="560" y="160"/>
+    </Label>
+</Scene>
diff --git a/shared/data/nofile.dummy b/shared/data/nofile.dummy
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/shared/res/screen-density-xhigh/nofile.dummy b/shared/res/screen-density-xhigh/nofile.dummy
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/shared/trusted/nofile.dummy b/shared/trusted/nofile.dummy
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/src/CallActiveCallForm.cpp b/src/CallActiveCallForm.cpp
new file mode 100644 (file)
index 0000000..1bdc61f
--- /dev/null
@@ -0,0 +1,1834 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file       PhnActiveCallForm.cpp
+ * @brief      Active Call Form class
+ */
+#include <FApp.h>
+#include <FUi.h>
+#include <FMedia.h>
+#include <FSystem.h>
+#include "CallActiveCallForm.h"
+#include "CallButtonsPanel.h"
+#include "CallInfo.h"
+#include "CallAppUtility.h"
+#include "CallDtmfKeypadPanel.h"
+#include "CallPresentationModel.h"
+#include "CallSceneRegister.h"
+#include "CallTypes.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Base::Utility;
+using namespace Tizen::Graphics;
+using namespace Tizen::Media;
+using namespace Tizen::Social;
+using namespace Tizen::System;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+
+//constants
+const int IDI_MAX_SECONDS = 60;
+const int IDI_MAX_MINS = 60;
+const int W_HOLD_BITMAP = 78;
+const int H_HOLD_BITMAP = 78;
+//for Options menu list
+const int IDI_POPUP_TEXT_SIZE = 33;
+const unsigned int COLOR_POPUP_TEXT = Color32<255, 255, 255, 255>::Value;
+const int IDI_MOREOPTIONS_LIST_ITEMS = 1;
+const int W_OPTION_ANCHOR = 72;
+const int H_OPTION_ANCHOR = 22;
+const int W_MGR_CONFCALL_BITMAP = 64;
+const int H_MGR_CONFCALL_BITMAP = 64;
+const int X_POPUP_ANCHOR = 632;
+const int Y_POPUP_ANCHOR = 140;
+const int W_POPUP_ANCHOR = 72;
+const int H_POPUP_ANCHOR = 22;
+const int IDI_OPTIONMENU_ITEM_SPACING = 16;
+const Point IDI_OPTIONMENU_POS(238, 162);
+const Dimension IDI_OPTIONMENU_DIMEN(466, 99);
+const int X_PHOTO_LBL = 166;
+const int Y_PHOTO_LBL = 232;
+const int W_PHOTO_LBL = 388;
+const int H_PHOTO_LBL = 388;
+const int W_PHOTO_LABEL = 720;
+const int H_PHOTO_LABEL = 720;
+const int W_RIGHT_MORE_ICON_MARGIN = 24;
+const int W_MORE_LABEL = 466;
+const int H_MORE_LABEL = 162;
+const int W_MORE_ICON = 70;
+
+static const wchar_t* IDC_CONF_CALL_MORE_BUTTON = L"IDC_CONF_CALL_MORE_BUTTON";
+static const wchar_t* IDC_HOLD_BUTTON = L"IDC_HOLD_BUTTON";
+static const wchar_t* IDC_SWAP_BUTTON = L"IDC_SWAP_BUTTON";
+static const wchar_t* IDC_HOLD_LABEL = L"IDC_HOLD_LABEL";
+static const wchar_t* IDC_TEXTBOX = L"IDC_TEXTBOX";
+static const wchar_t* IDC_CALLER1_LABEL = L"IDC_CALLER1_LABEL";
+static const wchar_t* IDC_BACKGROUND_LABEL = L"IDC_BACKGROUND_LABEL";
+static const wchar_t* IDC_CALLER1_TIME_LABEL = L"IDC_CALLER1_TIME_LABEL";
+static const wchar_t* IDC_NUMBER1_LABEL = L"IDC_NUMBER1_LABEL";
+static const wchar_t* IDC_VOICE_CALL_ICON_LABEL = L"IDC_VOICE_CALL_ICON_LABEL";
+static const wchar_t* IDC_CALLER2_LABEL = L"IDC_CALLER2_LABEL";
+static const wchar_t* IDC_NUMBER2_LABEL = L"IDC_NUMBER2_LABEL";
+static const wchar_t* IDC_CALLER2_TIME_LABEL = L"IDC_CALLER2_TIME_LABEL";
+static const wchar_t* IDC_SWAP_LABEL = L"IDC_SWAP_LABEL";
+static const wchar_t* IDC_BACKGROUND_LABEL2 = L"IDC_BACKGROUND_LABEL2";
+static const wchar_t* IDC_PARTICIPANTS_LABEL = L"IDC_PARTICIPANTS_LABEL";
+static const wchar_t* IDC_CALLER1_BIGPHOTO_LABEL = L"IDC_CALLER1_BIGPHOTO_LABEL";
+static const wchar_t* IDC_CALLER2_PHOTO_LABEL = L"IDC_CALLER2_PHOTO_LABEL";
+static const wchar_t* IDC_CALLER1_PHOTO_LABEL = L"IDC_CALLER1_PHOTO_LABEL";
+static const wchar_t* IDC_KEY_BG_LABEL = L"IDC_KEY_BG_LABEL";
+
+ActiveCallForm::ActiveCallForm(FormType formType)
+       : BaseForm(formType)
+{
+       __pActiveCallTimer = null;
+       __pCallButtonsPanel = null;
+       __pDTMFKeypad = null;
+       __pMoreOptionsList = null;
+       __pMoreOptionsListAnchor = null;
+       __pSmallPhotoLabel = null;
+       __pActiveCallInfo = null;
+       __pHeldCallInfo = null;
+}
+
+ActiveCallForm::~ActiveCallForm(void)
+{
+       if (__pActiveCallTimer != null)
+       {
+               __pActiveCallTimer->Cancel();
+               delete __pActiveCallTimer;
+       }
+       if (__pMoreOptionsList != null)
+       {
+               RemoveControl(*__pMoreOptionsList);
+               __pMoreOptionsList = null;
+       }
+       if (__pMoreOptionsListAnchor != null)
+       {
+               RemoveControl(*__pMoreOptionsListAnchor);
+               __pMoreOptionsListAnchor = null;
+       }
+       if (__pSmallPhotoLabel != null)
+       {
+               RemoveControl(*__pSmallPhotoLabel);
+               __pSmallPhotoLabel = null;
+       }
+       if (__pActiveCallInfo != null)
+       {
+               delete __pActiveCallInfo;
+       }
+       if (__pHeldCallInfo != null)
+       {
+               delete __pHeldCallInfo;
+       }
+       if(__pDTMFKeypad != null)
+       {
+               RemoveControl(*__pDTMFKeypad);
+               __pDTMFKeypad = null;
+       }
+}
+
+void
+ActiveCallForm::Initialize(void)
+{
+       switch (__formType)
+       {
+       case FORMTYPE_OUTGOINGCALL:
+               Construct(IDL_OUTCALL_FORM);
+               break;
+
+       case FORMTYPE_EMERGENCYOUTGOINGCALL:
+               Construct(IDL_OUT_EMERGENCYCALL_FORM);
+               break;
+
+       case FORMTYPE_ACTIVECALL:
+               Construct(IDL_CALL_FORM);
+               break;
+
+       case FORMTYPE_EMERGENCYACTIVECALL:
+               Construct(IDL_EMERGENCY_CALL_FORM);
+               break;
+
+       case FORMTYPE_MULTIPLECALLS:
+               Construct(IDL_MULTIPLE_CALL_FORM);
+               break;
+
+       case FORMTYPE_ACTIVECONFCALL:
+               Construct(IDL_CONFCALL_FORM);
+               break;
+
+       default:
+               break;
+       }
+}
+
+result
+ActiveCallForm::OnInitializing(void)
+{
+       result r = E_SUCCESS;
+
+       //Hold Button - Shown on single active/conf call scene
+       InitializeHoldButton();
+       //Swap button for multiple call screen
+       InitializeSwapButton();
+       //Initialize manage conf. call list form
+       InitializeManageConfCallButton();
+
+       __pCallPresentor = CallPresentationModel::GetInstance();
+       return r;
+}
+
+void
+ActiveCallForm::ShowDTMFKeypad(void)
+{
+       if(__pDTMFKeypad != null)
+       {
+               RemoveControl(*__pDTMFKeypad);
+               __pDTMFKeypad = null;
+       }
+
+       if(__pDTMFKeypad == null)
+       {
+               //update rect according to client screen area
+               Rectangle rect(0, 0, 0, 0);
+               if (GetOrientationStatus() == ORIENTATION_STATUS_PORTRAIT)
+               {
+                       rect.width = GetClientAreaBounds().width;
+                       rect.height = GetClientAreaBounds().height - __pCallButtonsPanel->GetHeight();
+               }
+               else if (GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE)
+               {
+                       rect.height = GetClientAreaBounds().height;
+                       rect.width = GetClientAreaBounds().width - __pCallButtonsPanel->GetWidth();
+               }
+
+               AppLog("rect(%d,%d,%d,%d)",rect.x,rect.y,rect.width,rect.height);
+               __pDTMFKeypad = new (std::nothrow) DtmfKeyPadPanel();
+               __pDTMFKeypad->Initialize(this, rect);
+               AddControl(*__pDTMFKeypad);
+       }
+       TextBox* pTextBox = static_cast<TextBox*>(__pDTMFKeypad->GetControl(IDC_TEXTBOX));
+       pTextBox->SetText(L"");
+       __pDTMFKeypad->SetShowState(true);
+       __pDTMFKeypad->Draw(true);
+       __pDTMFKeypad->Show();
+}
+
+void
+ActiveCallForm::OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus)
+{
+       AppLog("ENTER");
+
+       if (__pCallButtonsPanel != null)
+       {
+               //update position of call buttons panel
+               Label* pKeysBgLbl = static_cast<Label*>(GetControl(IDC_KEY_BG_LABEL, true));
+               __pCallButtonsPanel->SetBounds(pKeysBgLbl->GetBounds());
+
+               //bring button on top
+               __pCallButtonsPanel->SetButtonPosition();
+
+               RelativeLayout* pRelativeLayout = dynamic_cast<RelativeLayout*>(GetPortraitLayoutN());
+               if (pRelativeLayout != null)
+               {
+                       pRelativeLayout->SetRelation(*__pCallButtonsPanel, *pKeysBgLbl, RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM);
+               }
+
+               pRelativeLayout = dynamic_cast<RelativeLayout*>(GetLandscapeLayoutN());
+               if (pRelativeLayout != null)
+               {
+                       pRelativeLayout->SetRelation(*__pCallButtonsPanel, *pKeysBgLbl, RECT_EDGE_RELATION_LEFT_TO_LEFT);
+                       pRelativeLayout->SetRelation(*__pCallButtonsPanel, *pKeysBgLbl, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
+               }
+
+               //change orientation of DTMF Keypad, if it is visible.
+               if (__pDTMFKeypad != null)
+               {
+                       if (orientationStatus == ORIENTATION_STATUS_LANDSCAPE)
+                       {
+                               //in landscape mode, caller info is visible.
+                               SetShowStateOnKeypad(true);
+                       }
+                       else if (orientationStatus == ORIENTATION_STATUS_PORTRAIT)
+                       {
+                               //in Portrait mode it is hidden beneath DTMF Keypad.
+                               SetShowStateOnKeypad(false);
+                       }
+                       String dtmfText = static_cast<TextBox*>(__pDTMFKeypad->GetControl(IDC_TEXTBOX))->GetText();
+                       ShowDTMFKeypad();
+                       //get new text box.
+                       TextBox* pTextBox = static_cast<TextBox*>(__pDTMFKeypad->GetControl(IDC_TEXTBOX));
+                       pTextBox->SetText(dtmfText);
+               }
+       }
+}
+
+void
+ActiveCallForm::HideDTMFKeypad(void)
+{
+       if(__pDTMFKeypad != null)
+       {
+               RemoveControl(*__pDTMFKeypad);
+               __pDTMFKeypad = null;
+       }
+}
+
+result
+ActiveCallForm::InitializeCallButtonsPanel(void)
+{
+       result r = E_SUCCESS;
+       //Set background bitmap for call keypad
+       Label* pKeysBgLbl = static_cast<Label*>(GetControl(IDC_KEY_BG_LABEL, true));
+       Bitmap* pBgBitmap = AppUtility::GetBitmapFromResourcesN(IDB_BACKGROUND_BITMAP, pKeysBgLbl->GetWidth(), pKeysBgLbl->GetHeight());
+       if (pBgBitmap != null)
+       {
+               pKeysBgLbl->SetBackgroundBitmap(*pBgBitmap);
+       }
+
+       if (__pCallButtonsPanel == null)
+       {
+               __pCallButtonsPanel = new (std::nothrow) CallButtonsPanel();
+               __pCallButtonsPanel->ConstructPanel(this, __formType);
+               __pCallButtonsPanel->SetBounds(pKeysBgLbl->GetBounds());
+               r = AddControl(*__pCallButtonsPanel);
+       }
+
+       RelativeLayout* pRelativeLayout = dynamic_cast<RelativeLayout*>(GetPortraitLayoutN());
+       if (pRelativeLayout != null)
+       {
+               pRelativeLayout->SetRelation(*__pCallButtonsPanel, *pKeysBgLbl, RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM);
+       }
+       pRelativeLayout = dynamic_cast<RelativeLayout*>(GetLandscapeLayoutN());
+       if (pRelativeLayout != null)
+       {
+               pRelativeLayout->SetRelation(*__pCallButtonsPanel, *pKeysBgLbl, RECT_EDGE_RELATION_LEFT_TO_LEFT);
+               pRelativeLayout->SetRelation(*__pCallButtonsPanel, *pKeysBgLbl, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
+       }
+
+       return r;
+}
+
+void
+ActiveCallForm::InitializeSwapButton(void)
+{
+       Button* pSwapBtn = static_cast<Button*>(GetControl(IDC_SWAP_BUTTON));
+       if (pSwapBtn)
+       {
+               Bitmap* pSwapBmp = AppUtility::GetBitmapFromResourcesN(IDB_SWAP_ICON_NORMAL,
+                                                                                                                          W_HOLD_BITMAP, H_HOLD_BITMAP);
+               if (pSwapBmp)
+               {
+                       pSwapBtn->SetNormalBitmap(Point(0, 0), *pSwapBmp);
+               }
+               delete pSwapBmp;
+               pSwapBmp = null;
+
+               pSwapBmp = AppUtility::GetBitmapFromResourcesN(IDB_SWAP_ICON_PRESS,
+                                                                                                          W_HOLD_BITMAP, H_HOLD_BITMAP);
+               if (pSwapBmp)
+               {
+                       pSwapBtn->SetPressedBitmap(Point(0, 0), *pSwapBmp);
+               }
+               delete pSwapBmp;
+               pSwapBmp = null;
+               pSwapBtn->SetActionId(IDA_SWAP_CALLS);
+               pSwapBtn->AddActionEventListener(*this);
+       }
+}
+
+void
+ActiveCallForm::InitializeManageConfCallButton(void)
+{
+       Button* pMoreBtn = static_cast<Button*>(GetControl(IDC_CONF_CALL_MORE_BUTTON));
+       if (pMoreBtn != null)
+       {
+               pMoreBtn->SetActionId(IDA_MORE_OPTIONS_MENU);
+               pMoreBtn->AddActionEventListener(*this);
+               if (__formType == FORMTYPE_MULTIPLECALLS)
+               {
+                       //Correct state will be set in OnSceneActivated based on the call
+                       pMoreBtn->SetShowState(false);
+               }
+               else if (__formType == FORMTYPE_ACTIVECONFCALL)
+               {
+                       pMoreBtn->SetShowState(true);
+               }
+       }
+}
+
+void
+ActiveCallForm::InitializeHoldButton(void)
+{
+       Button* pHoldBtn = static_cast<Button*>(GetControl(IDC_HOLD_BUTTON));
+       if (pHoldBtn != null)
+       {
+               //set status of Hold Button
+               SetHoldButtonStatus(true);
+               pHoldBtn->AddActionEventListener(*this);
+       }
+}
+
+void
+ActiveCallForm::SetHoldButtonStatus(bool toHoldCall)
+{
+       //background bitmap & button name
+       String btnName("");
+       Bitmap* normalImg = null;
+       Bitmap* pressImg = null;
+       if (toHoldCall)
+       {
+               btnName.Append(AppUtility::GetResourceString(IDS_HOLD_BTN_NAME));
+               normalImg = AppUtility::GetBitmapFromResourcesN(IDB_HOLD_NORMAL_BUTTON_ICON,
+                                                                                                               W_HOLD_BITMAP, H_HOLD_BITMAP);
+               pressImg = AppUtility::GetBitmapFromResourcesN(IDB_HOLD_PRESS_BUTTON_ICON,
+                                                                                                          W_HOLD_BITMAP, H_HOLD_BITMAP);
+       }
+       else
+       {
+               btnName.Append(AppUtility::GetResourceString(IDS_UNHOLD_BTN_NAME));
+               normalImg = AppUtility::GetBitmapFromResourcesN(IDB_UNHOLD_NORMAL_BUTTON_ICON,
+                                                                                                               W_HOLD_BITMAP, H_HOLD_BITMAP);
+               pressImg = AppUtility::GetBitmapFromResourcesN(IDB_UNHOLD_PRESS_BUTTON_ICON,
+                                                                                                          W_HOLD_BITMAP, H_HOLD_BITMAP);
+       }
+
+       //Action id
+       CommandIds cmdId = IDA_HOLD_CALL;
+       switch (__formType)
+       {
+       case FORMTYPE_ACTIVECALL:
+       {
+               cmdId = toHoldCall ? IDA_HOLD_CALL : IDA_UNHOLD_CALL;
+       }
+       break;
+
+       case FORMTYPE_ACTIVECONFCALL:
+       {
+               cmdId = toHoldCall ? IDA_HOLD_CONF_CALL : IDA_UNHOLD_CONF_CALL;
+       }
+       break;
+
+       default:
+               break;
+       }
+
+       //set background bitmap, button name & action id
+       Button* pHoldBtn = static_cast<Button*>(GetControl(IDC_HOLD_BUTTON));
+       Label* pHoldLbl = static_cast<Label*>(GetControl(IDC_HOLD_LABEL));
+       if (pHoldBtn)
+       {
+               pHoldBtn->SetActionId(cmdId);
+               pHoldBtn->SetNormalBitmap(Point(0, 0),*normalImg);
+               pHoldBtn->SetPressedBitmap(Point(0, 0),*pressImg);
+       }
+       if (pHoldLbl)
+       {
+               pHoldLbl->SetText(btnName);
+               pHoldLbl->Invalidate(true);
+       }
+
+       //free the resources
+       delete normalImg;
+       normalImg = null;
+       delete pressImg;
+       pressImg = null;
+}
+
+void
+ActiveCallForm::CreateMoreOptionsMenuList(void)
+{
+       //create option list anchor
+       if (__pMoreOptionsListAnchor == null)
+       {
+               Bitmap* pBgPopupArwBmp = AppUtility::GetBitmapFromResourcesN(IDB_POPUP_ARROW_ICON, W_OPTION_ANCHOR,
+                                                                                                                                        H_OPTION_ANCHOR);
+               __pMoreOptionsListAnchor = new (std::nothrow) Label();
+               __pMoreOptionsListAnchor->Construct(Rectangle(GetWidth()-W_RIGHT_MORE_ICON_MARGIN - W_MORE_ICON, Y_POPUP_ANCHOR, W_POPUP_ANCHOR, H_POPUP_ANCHOR), L"");
+               __pMoreOptionsListAnchor->SetBackgroundBitmap(*pBgPopupArwBmp);
+
+               delete pBgPopupArwBmp;
+               pBgPopupArwBmp = null;
+
+               // Adds a Label to the Form
+               AddControl(*__pMoreOptionsListAnchor);
+       }
+
+       //create options menu list
+       if (__pMoreOptionsList == null)
+       {
+               __pMoreOptionsList = new (std::nothrow) ListView();
+               __pMoreOptionsList->Construct(Rectangle(Point(GetWidth()-W_RIGHT_MORE_ICON_MARGIN - W_MORE_LABEL,H_MORE_LABEL), IDI_OPTIONMENU_DIMEN), false, SCROLL_STYLE_FADE_OUT);
+               __pMoreOptionsList->SetItemProvider(*this);
+               __pMoreOptionsList->AddListViewItemEventListener(*this);
+               //Add option list to the form
+               AddControl(*__pMoreOptionsList);
+       }
+       else
+       {
+               //Hide option menu list
+               DestroyMoreOptionsMenuList();
+       }
+}
+
+void
+ActiveCallForm::DestroyMoreOptionsMenuList(void)
+{
+       if (__pMoreOptionsListAnchor != null)
+       {
+               //removes and delete the child control
+               RemoveControl(*__pMoreOptionsListAnchor);
+               __pMoreOptionsListAnchor = null;
+       }
+
+       if (__pMoreOptionsList != null)
+       {
+               //removes and delete the child control
+               RemoveControl(*__pMoreOptionsList);
+               __pMoreOptionsList = null;
+       }
+}
+
+result
+ActiveCallForm::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+       if (__pCallPresentor != null)
+       {
+               __pCallPresentor = null;
+       }
+       return r;
+}
+
+void
+ActiveCallForm::OnActionPerformed(const Control& source, int actionId)
+{
+
+       String dtmfString;
+       switch (actionId)
+       {
+       case IDA_END_CALL:
+       {
+               //End the currently active / dialing call
+               if (__pActiveCallInfo->IsConferenceCall() == false)
+               {
+                       String activeContactNo;
+                       activeContactNo.Append(__pActiveCallInfo->GetContactNumber());
+                       //Check if it is call is in dialing state, then
+                       if (__formType == FORMTYPE_EMERGENCYOUTGOINGCALL || __formType == FORMTYPE_OUTGOINGCALL)
+                       {
+                               __pCallPresentor->EndDialingCall(activeContactNo);
+                       }
+                       else
+                       {
+                               //end active calls
+                               __pCallPresentor->EndActiveCall(*__pActiveCallInfo->GetCallHandle());
+                       }
+               }
+               else
+               {
+                       __pCallPresentor->EndConferenceCall();
+               }
+       }
+       break;
+
+       case IDA_END_CONF_CALL:
+       {
+               AppAssert(__formType == FORMTYPE_ACTIVECONFCALL);
+               __pCallPresentor->EndConferenceCall();
+       }
+       break;
+
+       case IDA_OPEN_NUMKEYPAD:
+       {
+               if (GetOrientationStatus() == ORIENTATION_STATUS_PORTRAIT)
+               {
+                       //hide only in portrait mode.
+               SetShowStateOnKeypad(false);
+               }
+               ShowDTMFKeypad();
+               SetTextToDTMFTextField(L"");
+               __pCallButtonsPanel->SetKeypadButtonState(IDA_CLOSE_NUMKEYPAD);
+       }
+       break;
+
+       case IDA_CLOSE_NUMKEYPAD:
+       {
+               SetShowStateOnKeypad(true);
+               HideDTMFKeypad();
+               __pCallButtonsPanel->SetKeypadButtonState(IDA_OPEN_NUMKEYPAD);
+       }
+       break;
+
+       case IDA_ADD_CALL:
+       {
+               //switch to Dialer Form to make an call
+               if(__pCallPresentor->GetCurrentCallCount() == 1)
+               {
+/*             ArrayList* pArgs = new (std::nothrow) ArrayList(SingleObjectDeleter);
+               pArgs->Construct();
+               String* formType = new (std::nothrow) String();
+               formType->Append(__formType);
+               pArgs->Add(formType);
+               pSceneManager->GoForward( ForwardSceneTransition(IDSCN_DIALER, SCENE_TRANSITION_ANIMATION_TYPE_NONE,
+                               SCENE_HISTORY_OPTION_NO_HISTORY), pArgs);*/
+                       __pCallPresentor->LaunchDialAppControl();
+
+               }
+       }
+       break;
+
+       case IDA_HOLD_CALL:
+       {
+               bool success = true;
+               if (__pActiveCallInfo->IsConferenceCall() == false)
+               {
+                       if(__pActiveCallInfo->GetCallHandle() != null)
+                       {
+                               success = __pCallPresentor->HoldCall(*__pActiveCallInfo->GetCallHandle());
+                       }
+               }
+               else
+               {
+                       success = __pCallPresentor->HoldConferenceCall();
+               }
+               //reset hold status and "OnHold" text
+               ShowTimerInfo(IDC_CALLER1_TIME_LABEL, success);
+               if(__pActiveCallTimer != null)
+               {
+                       __pActiveCallTimer->Cancel();
+               }
+               SetHoldButtonStatus(!success);
+       }
+       break;
+
+       case IDA_UNHOLD_CALL:
+       {
+               bool success = false;
+               if (__pActiveCallInfo->IsConferenceCall() == false)
+               {
+                       if(__pActiveCallInfo->GetCallHandle() != null)
+                       {
+                               success = __pCallPresentor->UnHoldCall(*__pActiveCallInfo->GetCallHandle());
+                       }
+               }
+               else
+               {
+                       success = __pCallPresentor->ActivateConferenceCall();
+               }
+               //reset hold status and show call timer
+               ShowTimerInfo(IDC_CALLER1_TIME_LABEL, !success, __activeCallStartTime);
+               SetHoldButtonStatus(success);
+       }
+       break;
+
+       case IDA_HOLD_CONF_CALL:
+       {
+               AppAssert(__formType == FORMTYPE_ACTIVECONFCALL);
+               bool success = __pCallPresentor->HoldConferenceCall();
+               //reset hold status and "OnHold" text
+               SetHoldButtonStatus(!success);
+               ShowTimerInfo(IDC_CALLER1_TIME_LABEL, success);
+               if(__pActiveCallTimer != null)
+               {
+                       __pActiveCallTimer->Cancel();
+               }
+       }
+       break;
+
+       case IDA_UNHOLD_CONF_CALL:
+       {
+               AppAssert(__formType == FORMTYPE_ACTIVECONFCALL);
+               bool success = __pCallPresentor->ActivateConferenceCall();
+               //reset hold status and show call timer
+               ShowTimerInfo(IDC_CALLER1_TIME_LABEL, !success, __activeCallStartTime);
+               SetHoldButtonStatus(success);
+       }
+       break;
+
+       case IDA_OPEN_CONTACTS:
+       {
+               //Open Contacts APP
+               //Launch call application
+               AppManager* pAppManager = AppManager::GetInstance();
+               pAppManager->LaunchApplication(PROVIDER_ID_CONTACTS);
+       }
+               break;
+
+       case IDA_MUTE:
+       {
+               bool success = __pCallPresentor->SetMuteStatus(true);
+               if (success)
+               {
+                       __pCallButtonsPanel->SetMuteButtonState(IDA_UNMUTE);
+               }
+       }
+       break;
+
+       case IDA_UNMUTE:
+       {
+               bool success = __pCallPresentor->SetMuteStatus(false);
+               if (success)
+               {
+                       __pCallButtonsPanel->SetMuteButtonState(IDA_MUTE);
+               }
+       }
+       break;
+
+       case IDA_SPEAKER:
+       {
+               bool success = __pCallPresentor->SetSpeakerStatus(true);
+               if (success)
+               {
+                       __pCallButtonsPanel->SetSpeakerButtonState(IDA_SPEAKER_OFF);
+               }
+       }
+       break;
+
+       case IDA_SPEAKER_OFF:
+       {
+               bool success = __pCallPresentor->SetSpeakerStatus(false);
+               if (success)
+               {
+                       __pCallButtonsPanel->SetSpeakerButtonState(IDA_SPEAKER);
+               }
+       }
+       break;
+
+       case IDA_JOIN_CALL:
+       {
+               AppAssert(__formType == FORMTYPE_MULTIPLECALLS);
+               __pCallPresentor->JoinCall();
+       }
+       break;
+
+       case IDA_SWAP_CALLS:
+       {
+               AppAssert(__formType == FORMTYPE_MULTIPLECALLS);
+               __pCallPresentor->SwapCalls();
+       }
+       break;
+
+       case IDA_MORE_OPTIONS_MENU:
+       {
+               //Show 'more' options menu
+               CreateMoreOptionsMenuList();
+       }
+       break;
+
+       case NUM_KEY0:
+       {
+               dtmfString.Append(L"0");
+               SetTextToDTMFTextField(dtmfString);
+               __pCallPresentor->SendDTMFSignal(dtmfString);
+       }
+       break;
+
+       case NUM_KEY1:
+       {
+               dtmfString.Append(L"1");
+               SetTextToDTMFTextField(dtmfString);
+               __pCallPresentor->SendDTMFSignal(dtmfString);
+       }
+       break;
+
+       case NUM_KEY2:
+       {
+               dtmfString.Append(L"2");
+               SetTextToDTMFTextField(dtmfString);
+               __pCallPresentor->SendDTMFSignal(dtmfString);
+       }
+       break;
+
+       case NUM_KEY3:
+       {
+               dtmfString.Append(L"3");
+               SetTextToDTMFTextField(dtmfString);
+               __pCallPresentor->SendDTMFSignal(dtmfString);
+       }
+       break;
+
+       case NUM_KEY4:
+       {
+               dtmfString.Append(L"4");
+               SetTextToDTMFTextField(dtmfString);
+               __pCallPresentor->SendDTMFSignal(dtmfString);
+       }
+       break;
+
+       case NUM_KEY5:
+       {
+               dtmfString.Append(L"5");
+               SetTextToDTMFTextField(dtmfString);
+               __pCallPresentor->SendDTMFSignal(dtmfString);
+       }
+       break;
+
+       case NUM_KEY6:
+       {
+               dtmfString.Append(L"6");
+               SetTextToDTMFTextField(dtmfString);
+               __pCallPresentor->SendDTMFSignal(dtmfString);
+       }
+       break;
+
+       case NUM_KEY7:
+       {
+               dtmfString.Append(L"7");
+               SetTextToDTMFTextField(dtmfString);
+               __pCallPresentor->SendDTMFSignal(dtmfString);
+       }
+       break;
+
+       case NUM_KEY8:
+       {
+               dtmfString.Append(L"8");
+               SetTextToDTMFTextField(dtmfString);
+               __pCallPresentor->SendDTMFSignal(dtmfString);
+       }
+       break;
+
+       case NUM_KEY9:
+       {
+               dtmfString.Append(L"9");
+               SetTextToDTMFTextField(dtmfString);
+               __pCallPresentor->SendDTMFSignal(dtmfString);
+       }
+       break;
+
+       case PAUSE_KEY:
+       {
+               dtmfString.Append(L"*");
+               SetTextToDTMFTextField(dtmfString);
+               __pCallPresentor->SendDTMFSignal(dtmfString);
+       }
+       break;
+
+       case HASH_KEY:
+       {
+               dtmfString.Append(L"#");
+               SetTextToDTMFTextField(dtmfString);
+               __pCallPresentor->SendDTMFSignal(dtmfString);
+       }
+       break;
+
+       default:
+               break;
+       }
+}
+
+void
+ActiveCallForm::SetTextToDTMFTextField(const String& dtmfStr)
+{
+       if(__pDTMFKeypad != null)
+       {
+               TextBox* pTextBox = static_cast<TextBox*>(__pDTMFKeypad->GetControl(IDC_TEXTBOX));
+               pTextBox->AppendText(dtmfStr);
+               pTextBox->Invalidate(true);
+       }
+}
+
+void
+ActiveCallForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& currentSceneId, IList* pArgs)
+{
+       AppLog("ENTER");
+       //set itself as listener
+       __pCallPresentor->SetTelEventListener(this);
+       AddOrientationEventListener(*this);
+
+       //Initialize keypad and buttons
+       InitializeCallButtonsPanel();
+
+       if (__pActiveCallInfo != null)
+       {
+               delete __pActiveCallInfo;
+               __pActiveCallInfo = null;
+       }
+       if (__pHeldCallInfo != null)
+       {
+               delete __pHeldCallInfo;
+               __pHeldCallInfo = null;
+       }
+       DestroyMoreOptionsMenuList();
+
+       switch (__formType)
+       {
+       case FORMTYPE_OUTGOINGCALL:
+       {
+               String contactNo;
+               contactNo.Append(*(static_cast<String*>(pArgs->GetAt(0))));
+               __pActiveCallInfo = new (std::nothrow) CallInfo();
+               __pActiveCallInfo->SetContactNumber(contactNo);
+               Contact* pContact = __pCallPresentor->GetContactN(contactNo);
+               if (pContact != null)
+               {
+                       __pActiveCallInfo->SetContactInfo(*pContact);
+                       delete pContact;
+               }
+               ShowPersonDetails(contactNo, IDC_NUMBER1_LABEL, IDC_CALLER1_LABEL, false,__pActiveCallInfo);
+               //make an normal outgoing call
+               __pCallPresentor->DialCall(contactNo, false);
+       }
+       break;
+
+       case FORMTYPE_EMERGENCYOUTGOINGCALL:
+       {
+               String* pContactNo = static_cast<String*>(pArgs->GetAt(0));
+               __pActiveCallInfo = new (std::nothrow) CallInfo();
+               long long phNumber = 0;
+               LongLong::Parse(*pContactNo, phNumber);
+               __pActiveCallInfo->SetContactNumber(*pContactNo);
+               //make an emergency call
+               __pCallPresentor->DialCall(*pContactNo, true);
+       }
+       break;
+
+       case FORMTYPE_ACTIVECALL:
+       {
+               //get contact number
+               CallInfo* pCall = static_cast<CallInfo*>(pArgs->GetAt(0));
+
+               __pActiveCallInfo = new (std::nothrow) CallInfo();
+               *__pActiveCallInfo =  *pCall;
+               String activeContactNo;
+               if(pCall->GetContactNumber().IsEmpty() == false)
+               {
+                       activeContactNo.Append(pCall->GetContactNumber());
+               }
+               else
+               {
+                       activeContactNo.Append(AppUtility::GetResourceString(IDS_NUMBER_UNKNOWN));
+               }
+               ShowPersonDetails(activeContactNo, IDC_NUMBER1_LABEL, IDC_CALLER1_LABEL, false,__pActiveCallInfo);
+
+               //show call active time using Timer
+               __activeCallStartTime = pCall->GetCallConnectTime();
+               ShowTimerInfo(IDC_CALLER1_TIME_LABEL, pCall->IsOnHold(), __activeCallStartTime);
+       }
+       break;
+
+       case FORMTYPE_EMERGENCYACTIVECALL:
+       {
+               //get contact number
+               CallInfo* pCall = static_cast<CallInfo*>(pArgs->GetAt(0));
+
+               __pActiveCallInfo = new (std::nothrow) CallInfo();
+               *__pActiveCallInfo =  *pCall;
+
+               //show call active time using Timer
+               __activeCallStartTime = pCall->GetCallConnectTime();
+               ShowTimerInfo(IDC_CALLER1_TIME_LABEL, pCall->IsOnHold(), __activeCallStartTime);
+       }
+       break;
+
+       case FORMTYPE_MULTIPLECALLS:
+       {
+               IListT<CallInfo>* pCallsList = __pCallPresentor->GetCallListN();
+               //update calls state
+               UpdateMultipleCallScreen(*pCallsList);
+               delete pCallsList;
+               pCallsList = null;
+       }
+       break;
+
+       case FORMTYPE_ACTIVECONFCALL:
+       {
+               //get Conf call
+               CallInfo* pConfInfo = static_cast<CallInfo*>(pArgs->GetAt(0));
+               __pActiveCallInfo = new (std::nothrow) CallInfo();
+               *__pActiveCallInfo =  *pConfInfo;
+
+               int participantsCount = __pActiveCallInfo->GetCallerListCount();
+
+               // show participant count on name Label
+               Label* pPeopleCountLbl = static_cast<Label*>(GetControl(IDC_PARTICIPANTS_LABEL));
+               if (pPeopleCountLbl)
+               {
+                       String count;
+                       count.Append(participantsCount);
+                       count.Append(" ");
+                       count.Append(AppUtility::GetResourceString(IDS_PEOPLE_STR));
+                       pPeopleCountLbl->SetText(count);
+               }
+
+               if(participantsCount >= IDI_MAX_CONF_CALL_PARTICIPANTS)
+               {
+                       __pCallButtonsPanel->EnableAddCallButton(false);
+               }
+               else
+               {
+                       __pCallButtonsPanel->EnableAddCallButton(true);
+               }
+
+               //show call active time using Timer
+               __activeCallStartTime = __pActiveCallInfo->GetCallConnectTime();
+               ShowTimerInfo(IDC_CALLER1_TIME_LABEL, __pActiveCallInfo->IsOnHold(),__activeCallStartTime);
+       }
+       break;
+
+       default:
+               break;
+       }
+
+       //Hide DTMFKeypad, if visible and show caller info
+       HideDTMFKeypad();
+       SetShowStateOnKeypad(true);
+       __pCallButtonsPanel->SetKeypadButtonState(IDA_OPEN_NUMKEYPAD);
+
+       //Set the correct speaker status
+       if(__pCallPresentor->IsSpeakerOn() == true)
+       {
+               __pCallButtonsPanel->SetSpeakerButtonState(IDA_SPEAKER_OFF);
+       }
+       else
+       {
+               __pCallButtonsPanel->SetSpeakerButtonState(IDA_SPEAKER);
+       }
+
+       //Set the correct Mute status
+       if (__pCallPresentor->IsCallMuted() == true)
+       {
+               __pCallButtonsPanel->SetMuteButtonState(IDA_UNMUTE);
+       }
+       else
+       {
+               __pCallButtonsPanel->SetMuteButtonState(IDA_MUTE);
+       }
+
+       if (pArgs)
+       {
+               pArgs->RemoveAll();
+               delete pArgs;
+               pArgs = null;
+       }
+}
+
+void
+ActiveCallForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId)
+{
+       RemoveOrientationEventListener(*this);
+       if (__pCallButtonsPanel != null)
+       {
+               RemoveControl(*__pCallButtonsPanel);
+               __pCallButtonsPanel = null;
+       }
+       if (__pActiveCallTimer != null)
+       {
+               __pActiveCallTimer->Cancel();
+               delete __pActiveCallTimer;
+               __pActiveCallTimer = null;
+       }
+       if (__pSmallPhotoLabel != null)
+       {
+               __pSmallPhotoLabel->SetShowState(false);
+       }
+       //Hide "Manage conf. Call" Context menu
+       if (__pMoreOptionsListAnchor != null)
+       {
+               __pMoreOptionsListAnchor->SetShowState(false);
+       }
+       if (__pMoreOptionsList != null)
+       {
+               __pMoreOptionsList->SetShowState(false);
+       }
+}
+
+void
+ActiveCallForm::HandleConfCallChanged(void)
+{
+       AppLog("ENTER");
+       AppAssert((__formType == FORMTYPE_ACTIVECONFCALL) || (__formType == FORMTYPE_MULTIPLECALLS));
+       //fetch changed conference call info
+       CallInfo* pConfCallInfo = __pCallPresentor->GetConferenceCallInfoN();
+       if (pConfCallInfo == null)
+       {
+               AppLog("EXIT");
+               return;
+       }
+
+       //fetch participant count in conf call
+       int participantsCount = pConfCallInfo->GetCallerListCount();
+       //update status of join and Add call
+       bool isEnableAddCall = false;
+       bool isEnableJoinCall = false;
+       if(participantsCount < IDI_MAX_CONF_CALL_PARTICIPANTS)
+       {
+               //available only at Active conf. call or active call screen
+               isEnableAddCall = true;
+               //join button is available only at multiple call screen
+               isEnableJoinCall = true;
+       }
+
+       Label* pPeopleCountLbl = null;
+       if (__pActiveCallInfo != null && __pActiveCallInfo->IsConferenceCall() == true)
+       {
+               //Active call is conference call
+               delete __pActiveCallInfo;
+               __pActiveCallInfo = new (std::nothrow) CallInfo();
+               *__pActiveCallInfo = *pConfCallInfo;
+
+               if (__formType == FORMTYPE_MULTIPLECALLS)
+               {
+                       pPeopleCountLbl = static_cast<Label*>(GetControl(IDC_NUMBER1_LABEL));
+               }
+               else if (__formType == FORMTYPE_ACTIVECONFCALL)
+               {
+                       pPeopleCountLbl = static_cast<Label*>(GetControl(IDC_PARTICIPANTS_LABEL));
+                       AppLog("Active conf call...(%d)", pPeopleCountLbl);
+               }
+       }
+       else if(__pHeldCallInfo != null && __pHeldCallInfo->IsConferenceCall() == true)
+       {
+               //Held call is conference call - this is definitely multiple call screen.
+               delete __pHeldCallInfo;
+               __pHeldCallInfo = new (std::nothrow) CallInfo();
+               *__pHeldCallInfo = *pConfCallInfo;
+               pPeopleCountLbl = static_cast<Label*>(GetControl(IDC_NUMBER2_LABEL));
+       }
+
+       // update participant count on name Label
+       if (pPeopleCountLbl != null)
+       {
+               String count;
+               count.Append(participantsCount);
+               count.Append(" ");
+               count.Append(AppUtility::GetResourceString(IDS_PEOPLE_STR));
+               pPeopleCountLbl->SetText(count);
+               pPeopleCountLbl->Invalidate(true);
+       }
+       //change AddCall Button status
+       __pCallButtonsPanel->EnableAddCallButton(isEnableAddCall);
+       //change JoinCall Button status
+       __pCallButtonsPanel->EnableJoinCallButton(isEnableJoinCall);
+       AppLog("EXIT");
+}
+
+void
+ActiveCallForm::UpdateMultipleCallScreen(Tizen::Base::Collection::IListT<CallInfo>& activeCallsList)
+{
+       AppLog("ENTER");
+       if(__pActiveCallInfo != null)
+       {
+               delete __pActiveCallInfo;
+               __pActiveCallInfo = null;
+       }
+       if(__pHeldCallInfo != null)
+       {
+               delete __pHeldCallInfo;
+               __pHeldCallInfo = null;
+       }
+
+       Button* pMoreBtn = static_cast<Button*>(GetControl(IDC_CONF_CALL_MORE_BUTTON));
+       if (pMoreBtn != null)
+       {
+               pMoreBtn->SetShowState(false);
+       }
+
+       //show caller's info.
+       for (int index = 0; index < activeCallsList.GetCount(); index++)
+       {
+               //Fetch call info
+               CallInfo callInfo;
+               activeCallsList.GetAt(index, callInfo);
+
+               String contactNo;
+               if(callInfo.GetContactNumber().IsEmpty() == false)
+               {
+                       contactNo.Append(callInfo.GetContactNumber());
+               }
+               else
+               {
+                       contactNo.Append(AppUtility::GetResourceString(IDS_NUMBER_UNKNOWN));
+               }
+
+               if (callInfo.IsOnHold() == false)
+               {
+                       __pActiveCallInfo = new (std::nothrow) CallInfo();
+                       *__pActiveCallInfo =  callInfo;
+
+                       if (__pActiveCallInfo->IsConferenceCall() == false)
+                       {
+                               Label* pVoiceIconLbl = static_cast<Label*>(GetControl(IDC_VOICE_CALL_ICON_LABEL));
+                               if (pVoiceIconLbl)
+                               {
+                                       pVoiceIconLbl->SetShowState(true);
+                               }
+                               if (pMoreBtn != null)
+                               {
+                                       pMoreBtn->SetShowState(false);
+                               }
+                               ShowPersonDetails(contactNo, IDC_NUMBER1_LABEL, IDC_CALLER1_LABEL, false,__pActiveCallInfo);
+                       }
+                       else
+                       {
+                               // show participant count on name Label
+                               Label* pPeopleCountLbl = static_cast<Label*>(GetControl(IDC_NUMBER1_LABEL));
+                               if (pPeopleCountLbl)
+                               {
+                                       String count;
+                                       count.Append(__pActiveCallInfo->GetCallerListCount());
+                                       count.Append(" ");
+                                       count.Append(AppUtility::GetResourceString(IDS_PEOPLE_STR));
+                                       pPeopleCountLbl->SetText(count);
+                               }
+                               String nameStr = AppUtility::GetResourceString(L"IDS_CONFERENCE_CALL_STRING");
+                               Label* pNameLbl = static_cast<Label*>(GetControl(IDC_CALLER1_LABEL));
+                               if (pNameLbl)
+                               {
+                                       pNameLbl->SetText(nameStr);
+                               }
+                               Label* pVoiceIconLbl = static_cast<Label*>(GetControl(IDC_VOICE_CALL_ICON_LABEL));
+                               if (pVoiceIconLbl)
+                               {
+                                       pVoiceIconLbl->SetShowState(false);
+                               }
+                               if (pMoreBtn != null)
+                               {
+                                       pMoreBtn->SetShowState(true);
+                               }
+                               Bitmap* pPhotoBitmap = AppUtility::GetBitmapFromResourcesN(IDB_CONFERENCE_BG_ICON,W_CONFERENCE_PHOTO,H_CONFERENCE_PHOTO);
+                               if (pPhotoBitmap != null)
+                               {
+                                       Label* pPhotoLbl = static_cast<Label*>(GetControl(IDC_CALLER1_PHOTO_LABEL));
+                                       if (pPhotoLbl)
+                                       {
+                                               pPhotoLbl->SetBackgroundBitmap(*pPhotoBitmap);
+                                               pPhotoLbl->Invalidate(true);
+                                       }
+                                       delete pPhotoBitmap;
+                               }
+                       }
+                       //show call active time using Timer
+                       __activeCallStartTime = __pActiveCallInfo->GetCallConnectTime();
+                       ShowTimerInfo(IDC_CALLER1_TIME_LABEL,false,__activeCallStartTime);
+               }
+               else
+               {
+                       __pHeldCallInfo = new (std::nothrow) CallInfo();
+                       *__pHeldCallInfo = callInfo;
+
+                       if (__pHeldCallInfo->IsConferenceCall() == false)
+                       {
+                               ShowPersonDetails(contactNo, IDC_NUMBER2_LABEL, IDC_CALLER2_LABEL, true,__pHeldCallInfo);
+                       }
+                       else
+                       {
+                               // show participant count on name Label
+                               Label* pPeopleCountLbl = static_cast<Label*>(GetControl(IDC_NUMBER2_LABEL));
+                               if (pPeopleCountLbl)
+                               {
+                                       String count;
+                                       count.Append(__pHeldCallInfo->GetCallerListCount());
+                                       count.Append(" ");
+                                       count.Append(AppUtility::GetResourceString(IDS_PEOPLE_STR));
+                                       pPeopleCountLbl->SetText(count);
+                               }
+                               String nameStr = AppUtility::GetResourceString(L"IDS_CONFERENCE_CALL_STRING");
+                               Label* pNameLbl = static_cast<Label*>(GetControl(IDC_CALLER2_LABEL));
+                               if (pNameLbl)
+                               {
+                                       pNameLbl->SetText(nameStr);
+                               }
+                               Bitmap* pPhotoBitmap = AppUtility::GetBitmapFromResourcesN(IDB_CONFERENCE_BG_ICON,W_CONFERENCE_PHOTO,H_CONFERENCE_PHOTO);
+                               if (pPhotoBitmap != null)
+                               {
+                                       Label* pPhotoLbl = static_cast<Label*>(GetControl(IDC_CALLER2_PHOTO_LABEL));
+                                       if (pPhotoLbl)
+                                       {
+                                               pPhotoLbl->SetBackgroundBitmap(*pPhotoBitmap);
+                                               pPhotoLbl->Invalidate(true);
+                                       }
+                                       delete pPhotoBitmap;
+                               }
+                       }
+                       //show "On Hold"
+                       ShowTimerInfo(IDC_CALLER2_TIME_LABEL, true);
+               }
+       }
+
+       //update JoinCall button status
+       bool isEnableJoinCall = true;
+       CallInfo* pConfCallInfo = __pCallPresentor->GetConferenceCallInfoN();
+       if(pConfCallInfo != null && pConfCallInfo->GetCallerListCount() >= IDI_MAX_CONF_CALL_PARTICIPANTS)
+       {
+               isEnableJoinCall = false;
+       }
+       __pCallButtonsPanel->EnableJoinCallButton(isEnableJoinCall);
+       delete pConfCallInfo;
+       pConfCallInfo = null;
+       Invalidate(true);
+       AppLog("EXIT");
+}
+
+void
+ActiveCallForm::ShowPersonDetails(const String& phoneNumber, const String& contactLblName, const String& nameLblName, bool isSecondCaller, CallInfo* pCallInfo)
+{
+       //call individual methods to show contact number, caller name & photo
+       ShowPhoneNumber(phoneNumber, contactLblName);
+
+       //fetch contact details based on phone number
+       String* pDisplayName = pCallInfo->FetchCallerNameN();
+       ShowCallerName(*pDisplayName, nameLblName);
+
+       Bitmap* pPhotoBitmap = pCallInfo->FetchCallerPhotoN();
+       ShowCallerPhoto(pPhotoBitmap, isSecondCaller);
+
+       //free resources
+       if (pDisplayName)
+       {
+               delete pDisplayName;
+               pDisplayName = null;
+       }
+       if (pPhotoBitmap)
+       {
+               delete pPhotoBitmap;
+               pPhotoBitmap = null;
+       }
+}
+
+void
+ActiveCallForm::ShowPhoneNumber(const String& phoneNumber, const String& contactLblName)
+{
+       String formattedNumber = phoneNumber;
+
+       Label* pContactLbl = static_cast<Label*>(GetControl(contactLblName));
+       if (pContactLbl)
+       {
+               pContactLbl->SetText(formattedNumber);
+               pContactLbl->Invalidate(true);
+       }
+}
+
+void
+ActiveCallForm::ShowCallerName(const String& callerName, const String& nameLblName)
+{
+       // show display name on name Label
+       Label* pNameLbl = static_cast<Label*>(GetControl(nameLblName));
+       if (pNameLbl)
+       {
+               //passing an empty string to SetText fails in label,
+               //if previously valid text has been set
+               if (callerName.IsEmpty() == true && pNameLbl->GetText().IsEmpty() == false)
+               {
+                       String stringToBeSet(L" ");
+                       pNameLbl->SetText(stringToBeSet);
+               }
+               else
+               {
+                       pNameLbl->SetText(callerName);
+               }
+               pNameLbl->Invalidate(true);
+       }
+}
+
+void
+ActiveCallForm::ShowCallerPhoto(Bitmap* pPhotoId, bool isSecondCaller)
+{
+       //to check if default image is to be shown
+       bool showDefaultPhoto = false;
+       bool showSmallPhoto = false;
+       String photoLabel("");
+
+       switch (__formType)
+       {
+       case FORMTYPE_OUTGOINGCALL:
+       case FORMTYPE_ACTIVECALL:
+       {
+               if (pPhotoId == null)
+               {
+                       //show default caller image
+                       showDefaultPhoto = true;
+               }
+               else
+               {
+                       //Check the size of photo
+                       // Now checking the condition with && but actually it should be ||
+                       //But for now keeping it as && because _pContact->GetThubNail() returns image width as
+                       // height 270 and width = 480 . So all images set thru gallery is show as small image
+                       if(pPhotoId->GetHeight() <= H_SMALL_PHOTO
+                                       && pPhotoId->GetWidth() <= W_SMALL_PHOTO)
+                       {
+                               showSmallPhoto = true;
+                       }
+
+               }
+               photoLabel.Append(IDC_CALLER1_BIGPHOTO_LABEL);
+       }
+       break;
+
+       case FORMTYPE_MULTIPLECALLS:
+       {
+               if (isSecondCaller)
+               {
+                       photoLabel.Append(IDC_CALLER2_PHOTO_LABEL);
+               }
+               else
+               {
+                       photoLabel.Append(IDC_CALLER1_PHOTO_LABEL);
+               }
+
+               if (pPhotoId == null)
+               {
+                       showDefaultPhoto = true;
+               }
+               else
+               {
+                       if (pPhotoId->GetHeight() <= H_SMALL_PHOTO
+                               && pPhotoId->GetWidth() <= W_SMALL_PHOTO)
+                       {
+                               //pPhotoId->Scale(Dimension(W_CONFERENCE_PHOTO,H_CONFERENCE_PHOTO));
+                               showSmallPhoto = true;
+                       }
+               }
+       }
+       break;
+
+       default:
+               break;
+       }
+
+       //Remove small photo label
+       if (__pSmallPhotoLabel != null)
+       {
+               RemoveControl(*__pSmallPhotoLabel);
+               __pSmallPhotoLabel = null;
+       }
+
+       //show photo - for Big Photo Id, Animated Call Image
+       if (!showDefaultPhoto)
+       {
+               if(showSmallPhoto == true)
+               {
+                       ShowThumbnailImage(pPhotoId,photoLabel);
+               }
+               else
+               {
+                       Label* pPhotoLbl = static_cast<Label*>(GetControl(photoLabel));
+                       if (pPhotoLbl)
+                       {
+                               Canvas* pCanvas = new (std::nothrow) Canvas;
+                               Rectangle canvasRect(Rectangle(0, 0, pPhotoLbl->GetBounds().width, pPhotoLbl->GetBounds().height));
+                               pCanvas->Construct(canvasRect);
+                               //draw the contact bitmap
+                               pCanvas->DrawBitmap(canvasRect,*pPhotoId);
+                               Bitmap* pNewPhotoId = new Bitmap();
+                               pNewPhotoId->Construct(*pCanvas, pCanvas->GetBounds());
+                               delete pCanvas;
+
+                               pPhotoLbl->SetBackgroundBitmap(*pNewPhotoId);
+                               pPhotoLbl->Invalidate(true);
+                               delete pNewPhotoId;
+                       }
+               }
+       }
+       else
+       {
+               Bitmap* pDefaultPhoto = null;
+               switch (__formType)
+               {
+               case FORMTYPE_OUTGOINGCALL:
+               case FORMTYPE_ACTIVECALL:
+                       pDefaultPhoto = AppUtility::GetBitmapFromResourcesN(IDB_ACTIVE_CALL_DEFAULT_ICON,W_CONFERENCE_PHOTO,W_CONFERENCE_PHOTO);
+                       break;
+
+               case FORMTYPE_MULTIPLECALLS:
+                       pDefaultPhoto = AppUtility::GetBitmapFromResourcesN(IDB_MULTIPLE_CALL_DEFAULT_ICON,W_CONFERENCE_PHOTO,H_CONFERENCE_PHOTO);
+                       break;
+
+               case FORMTYPE_ACTIVECONFCALL:
+                       pDefaultPhoto = AppUtility::GetBitmapFromResourcesN(IDB_CONFERENCE_BIG_BG_ICON,W_CONFERENCE_PHOTO,W_CONFERENCE_PHOTO);
+                       break;
+
+               default:
+                       break;
+               }
+               if (pDefaultPhoto != null)
+               {
+                       Label* pPhotoLbl = static_cast<Label*>(GetControl(photoLabel));
+                       if (pPhotoLbl)
+                       {
+                               pPhotoLbl->SetBackgroundBitmap(*pDefaultPhoto);
+                       }
+                       delete pDefaultPhoto;
+               }
+       }
+}
+
+void
+ActiveCallForm::ShowThumbnailImage(const Bitmap* pPhotoId,String& photoLabel)
+{
+       Label* pPhotoLbl = static_cast<Label*>(GetControl(photoLabel));
+
+       if (pPhotoLbl != null && pPhotoId != null)
+       {
+               Canvas* pCanvas = new (std::nothrow) Canvas;
+               Bitmap* pBackground = AppUtility::GetBitmapFromResourcesN(IDB_CALL_THUMBNAIL_BACKGROUND,W_CALL_THUMBNAIL,H_CALL_THUMBNAIL);
+               Bitmap* pShadow = AppUtility::GetBitmapFromResourcesN(IDB_CALL_THUMBNAIL_SHADOW,W_CALL_THUMBNAIL_SHADOW,H_CALL_THUMBNAIL_SHADOW);
+               Rectangle canvasRect(Rectangle(0, 0, pPhotoLbl->GetBounds().width, pPhotoLbl->GetBounds().height));
+               pCanvas->Construct(canvasRect);
+               //draw the back ground
+               pCanvas->DrawBitmap(canvasRect,*pBackground);
+               //draw shadow (to be enabled after correct shadow image is provided )
+               //pCanvas->DrawBitmap(Rectangle((pPhotoLbl->GetBounds().width/2)-(W_CALL_THUMBNAIL_SHADOW/2),
+                       //      (pPhotoLbl->GetBounds().height/2)-(H_CALL_THUMBNAIL_SHADOW/2),W_CALL_THUMBNAIL_SHADOW,H_CALL_THUMBNAIL_SHADOW),*pShadow);
+               //draw the contact bitmap
+               pCanvas->DrawBitmap(Rectangle((pPhotoLbl->GetBounds().width/2)-(W_SMALL_PHOTO/2),
+                               (pPhotoLbl->GetBounds().height/2)-(H_SMALL_PHOTO/2),W_SMALL_PHOTO,H_SMALL_PHOTO),*pPhotoId);
+               Bitmap* pNewPhotoId = new Bitmap();
+               pNewPhotoId->Construct(*pCanvas, pCanvas->GetBounds());
+               delete pCanvas;
+
+               pPhotoLbl->SetBackgroundBitmap(*pNewPhotoId);
+               pPhotoLbl->Invalidate(true);
+               delete pNewPhotoId;
+               delete pBackground;
+               delete pShadow;
+       }
+
+}
+
+void
+ActiveCallForm::ShowCallersPhotoThumbnail(const Bitmap& pPhotoId)
+{
+       if (__pSmallPhotoLabel != null)
+       {
+               RemoveControl(*__pSmallPhotoLabel);
+               __pSmallPhotoLabel = null;
+       }
+       //Draw Small Photo and show on small photo label
+       __pSmallPhotoLabel  = new (std::nothrow) Label();//static_cast<Label*>(GetControl(IDC_SMALL_PHOTO_LABEL));
+       __pSmallPhotoLabel->Construct(Rectangle(X_PHOTO_LBL, Y_PHOTO_LBL, W_PHOTO_LBL, H_PHOTO_LBL), L"");
+       __pSmallPhotoLabel->SetBackgroundColor(Color(0,0,0));
+       __pSmallPhotoLabel->SetBackgroundBitmap(pPhotoId);
+       // Add a Label to the Form
+       AddControl(*__pSmallPhotoLabel);
+       __pSmallPhotoLabel->Invalidate(true);
+}
+
+void
+ActiveCallForm::ShowTimerInfo(const String& timerLblName, bool isOnHold, long long startTime)
+{
+       Label* pTimerLbl = static_cast<Label*>(GetControl(timerLblName));
+
+       if (__pActiveCallTimer == null)
+       {
+               __pActiveCallTimer = new (std::nothrow) Tizen::Base::Runtime::Timer();
+               __pActiveCallTimer->Construct(*this);
+       }
+
+       if (pTimerLbl != null)
+       {
+               if (isOnHold == true)
+               {
+                       pTimerLbl->SetText(AppUtility::GetResourceString(IDS_TIMER_ON_HOLD));
+                       //update Hold button status
+                       SetHoldButtonStatus(false);
+               }
+               else
+               {
+                       //update Hold button status
+                       SetHoldButtonStatus(true);
+                       //current system time
+                       long long currTime = 0;
+                       SystemTime::GetTicks(currTime);
+                       //Set call duration
+                       TimeSpan diffSpan(abs(startTime - currTime));
+
+                       String activeCallTime(L"");
+
+                       long long hr = diffSpan.GetHours();
+                       if (hr <= 9)
+                       {
+                               activeCallTime.Append("0");
+                       }
+                       activeCallTime.Append(hr);
+                       activeCallTime.Append(L":");
+
+                       long long min = diffSpan.GetMinutes();
+                       if (min <= 9)
+                       {
+                               activeCallTime.Append("0");
+                       }
+                       activeCallTime.Append(min);
+                       activeCallTime.Append(L":");
+
+                       long long sec = diffSpan.GetSeconds();
+                       if (sec <= 9)
+                       {
+                               activeCallTime.Append("0");
+                       }
+                       activeCallTime.Append(sec);
+
+                       pTimerLbl->SetText(activeCallTime);
+                       __pActiveCallTimer->StartAsRepeatable(TimeSpan::NUM_OF_TICKS_IN_SECOND);
+               }
+               pTimerLbl->Invalidate(true);
+       }
+}
+
+void
+ActiveCallForm::SetShowStateOnKeypad(bool showState)
+{
+       Label* pLblControl = static_cast<Label*>(GetControl(IDC_CALLER1_LABEL));
+       pLblControl->SetShowState(showState);
+       pLblControl = static_cast<Label*>(GetControl(IDC_BACKGROUND_LABEL));
+       pLblControl->SetShowState(showState);
+       pLblControl = static_cast<Label*>(GetControl(IDC_CALLER1_TIME_LABEL));
+       pLblControl->SetShowState(showState);
+       if (__pSmallPhotoLabel != null)
+       {
+               __pSmallPhotoLabel->SetShowState(showState);
+       }
+
+       switch (__formType)
+       {
+       case FORMTYPE_ACTIVECALL:
+       {
+               pLblControl = static_cast<Label*>(GetControl(IDC_NUMBER1_LABEL));
+               pLblControl->SetShowState(showState);
+               pLblControl = static_cast<Label*>(GetControl(IDC_VOICE_CALL_ICON_LABEL));
+               pLblControl->SetShowState(showState);
+               pLblControl = static_cast<Label*>(GetControl(IDC_HOLD_LABEL));
+               pLblControl->SetShowState(showState);
+               Button* pButtonControl = static_cast<Button*>(GetControl(IDC_HOLD_BUTTON));
+               pButtonControl->SetShowState(showState);
+       }
+       break;
+
+       case FORMTYPE_MULTIPLECALLS:
+       {
+               pLblControl = static_cast<Label*>(GetControl(IDC_NUMBER1_LABEL));
+               pLblControl->SetShowState(showState);
+               pLblControl = static_cast<Label*>(GetControl(IDC_CALLER2_LABEL));
+               pLblControl->SetShowState(showState);
+               pLblControl = static_cast<Label*>(GetControl(IDC_NUMBER2_LABEL));
+               pLblControl->SetShowState(showState);
+               pLblControl = static_cast<Label*>(GetControl(IDC_CALLER2_TIME_LABEL));
+               pLblControl->SetShowState(showState);
+               pLblControl = static_cast<Label*>(GetControl(IDC_SWAP_LABEL));
+               pLblControl->SetShowState(showState);
+               pLblControl = static_cast<Label*>(GetControl(IDC_BACKGROUND_LABEL2));
+               pLblControl->SetShowState(showState);
+               if (__pActiveCallInfo != null && __pActiveCallInfo->IsConferenceCall() == false)
+               {
+                       pLblControl = static_cast<Label*>(GetControl(IDC_VOICE_CALL_ICON_LABEL));
+                       pLblControl->SetShowState(showState);
+               }
+               else
+               {
+                       Button* pButtonControl = static_cast<Button*>(GetControl(IDC_CONF_CALL_MORE_BUTTON));
+                       pButtonControl->SetShowState(showState);
+               }
+               Button* pButtonControl = static_cast<Button*>(GetControl(IDC_SWAP_BUTTON));
+               pButtonControl->SetShowState(showState);
+       }
+       break;
+
+       case FORMTYPE_ACTIVECONFCALL:
+       {
+               pLblControl = static_cast<Label*>(GetControl(IDC_PARTICIPANTS_LABEL));
+               pLblControl->SetShowState(showState);
+               pLblControl = static_cast<Label*>(GetControl(IDC_HOLD_LABEL));
+               pLblControl->SetShowState(showState);
+               Button* pButtonControl = static_cast<Button*>(GetControl(IDC_HOLD_BUTTON));
+               pButtonControl->SetShowState(showState);
+               pButtonControl = static_cast<Button*>(GetControl(IDC_CONF_CALL_MORE_BUTTON));
+               pButtonControl->SetShowState(showState);
+       }
+       break;
+
+       default:
+               break;
+       }
+}
+
+void
+ActiveCallForm::OnTimerExpired(Tizen::Base::Runtime::Timer& timer)
+{
+       //Call default implementation of "Object.Equals()"
+       //returns true, if they are pointing to same address.
+       if (__pActiveCallTimer->Equals(timer))
+       {
+               Label* pTimerLbl = static_cast<Label*>(GetControl(IDC_CALLER1_TIME_LABEL));
+               if (pTimerLbl)
+               {
+                       String activeCallTime = pTimerLbl->GetText();
+                       // Create a StringTokenizer instance
+                       StringTokenizer strTokens(activeCallTime, L":");
+
+                       int count = strTokens.GetTokenCount(); // count == 3
+                       String token;
+                       int sec = 0;
+                       int min = 0;
+                       int hr = 0;
+                       for (int index = 0; index < count; index++)
+                       {
+                               switch (index)
+                               {
+                               case 0:
+                                       strTokens.GetNextToken(token);
+                                       Integer::Parse(token, hr);
+                                       break;
+
+                               case 1:
+                                       strTokens.GetNextToken(token);
+                                       Integer::Parse(token, min);
+                                       break;
+
+                               case 2:
+                                       strTokens.GetNextToken(token);
+                                       Integer::Parse(token, sec);
+                                       break;
+                               }
+                       }
+                       //update all values
+                       sec = sec + 1;
+                       if (sec == IDI_MAX_SECONDS)
+                       {
+                               sec = 0;
+                               min = min + 1;
+                       }
+                       if (min == IDI_MAX_MINS)
+                       {
+                               min = 0;
+                               hr = hr + 1;
+                       }
+
+                       //replace string
+                       activeCallTime.Clear();
+                       if (hr <= 9)
+                       {
+                               activeCallTime.Append("0");
+                       }
+                       activeCallTime.Append(hr);
+                       activeCallTime.Append(":");
+                       if (min <= 9)
+                       {
+                               activeCallTime.Append("0");
+                       }
+                       activeCallTime.Append(min);
+                       activeCallTime.Append(":");
+                       if (sec <= 9)
+                       {
+                               activeCallTime.Append("0");
+                       }
+                       activeCallTime.Append(sec);
+                       //update timer label
+                       pTimerLbl->SetText(activeCallTime);
+                       pTimerLbl->Invalidate(true);
+               }
+       }
+}
+
+///////////////////////////////////////////////////////////
+///////////     Options Menu List Functionality   /////////
+///////////////////////////////////////////////////////////
+void
+ActiveCallForm::OnListViewContextItemStateChanged(ListView& listView, int index, int elementId, ListContextItemStatus state)
+{
+}
+
+void
+ActiveCallForm::OnListViewItemStateChanged(ListView& listView, int index, int elementId, ListItemStatus status)
+{
+       //Goto conference call list form
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_CONFCALLLIST), null);
+}
+
+void
+ActiveCallForm::OnListViewItemSwept(ListView& listView, int index, SweepDirection direction)
+{
+}
+
+void
+ActiveCallForm::OnListViewItemLongPressed(ListView& listView, int index, int elementId, bool& invokeListViewItemCallback)
+{
+}
+
+int
+ActiveCallForm::GetItemCount(void)
+{
+       return IDI_MOREOPTIONS_LIST_ITEMS;
+}
+
+ListItemBase*
+ActiveCallForm::CreateItem(int index, int itemWidth)
+{
+       //create 1st Menu option
+       CustomItem* pItem = new (std::nothrow) CustomItem();
+       pItem->Construct(IDI_OPTIONMENU_DIMEN, LIST_ANNEX_STYLE_NORMAL);
+
+       //Set background 9-patch bitmap to option menu
+       Bitmap* pBgBmp = AppUtility::GetBitmapFromResourcesN(IDB_POPUP_BG_ICON);
+       if (pBgBmp != null && pBgBmp->IsNinePatchedBitmap())
+       {
+               Canvas bgCanvas;
+               bgCanvas.Construct(Rectangle(IDI_OPTIONMENU_POS, IDI_OPTIONMENU_DIMEN));
+               bgCanvas.DrawNinePatchedBitmap(bgCanvas.GetBounds(), *pBgBmp);
+       }
+       else
+       {
+               pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL, Color(40, 45, 48));
+       }
+       delete pBgBmp;
+       pBgBmp = null;
+
+       //Set bitmap to option menu
+       Bitmap* pNormalConfCallBmp = AppUtility::GetBitmapFromResourcesN(IDB_MORE_MANAGE_CONFERENCE_ICON ,
+                                                                                                                                        W_MGR_CONFCALL_BITMAP, H_MGR_CONFCALL_BITMAP);
+       pItem->AddElement(Rectangle(16, 17, W_MGR_CONFCALL_BITMAP, H_MGR_CONFCALL_BITMAP), 1, *pNormalConfCallBmp, null, null);
+       // Deallocate bitmaps
+       delete pNormalConfCallBmp;
+       pNormalConfCallBmp = null;
+
+       //Set text to menu option
+       String confCallName = AppUtility::GetResourceString(IDS_MGR_CONF_CALL_LIST_STR);
+
+       TextElement* pTextElement = new (std::nothrow) TextElement();
+       pTextElement->Construct(confCallName);
+       pTextElement->SetTextColor(COLOR_POPUP_TEXT);
+       //create font
+       Font font;
+       font.Construct(FONT_STYLE_PLAIN, IDI_POPUP_TEXT_SIZE);
+       pTextElement->SetFont(font);
+       //construct Enriched text
+       EnrichedText* pEnrichedText = new (std::nothrow) EnrichedText();
+       Dimension textDimension;
+       font.GetTextExtent(confCallName, confCallName.GetLength(), textDimension);
+       textDimension.height = textDimension.height + font.GetDescender();
+       pEnrichedText->Construct(textDimension);
+       //add text element to enriched text
+       pEnrichedText->Add(*pTextElement);
+
+       //Add Enriched text to pItem
+       Point textPos(((2 * IDI_OPTIONMENU_ITEM_SPACING) + W_MGR_CONFCALL_BITMAP), ((IDI_OPTIONMENU_DIMEN.height - textDimension.height) / 2));
+       pItem->AddElement(Rectangle(textPos, textDimension), 2, *pEnrichedText);
+       // Cleans up
+       pEnrichedText->RemoveAll(true);
+       delete pEnrichedText;
+       return pItem;
+}
+
+bool
+ActiveCallForm::DeleteItem(int index, ListItemBase* pItem, int itemWidth)
+{
+       delete pItem;
+       return true;
+}
diff --git a/src/CallApp.cpp b/src/CallApp.cpp
new file mode 100644 (file)
index 0000000..4a1db2e
--- /dev/null
@@ -0,0 +1,439 @@
+/**
+ * Name        : CallApp
+ * Version     :
+ * Vendor      :
+ * Description :
+ */
+
+#include <FUi.h>
+#include "CallApp.h"
+#include "CallAppFrame.h"
+#include "CallPresentationModel.h"
+#include "CallTypes.h"
+#include "CallAppUtility.h"
+#include "CallIAppStateChangeListner.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::System;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+using namespace Tizen::Base::Utility;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Base::Utility;
+
+
+CallApp::CallApp(void):__initialSceneId(L""), __pLaunchArgs(null)
+{
+       __listenerList.Construct();
+}
+
+CallApp::~CallApp(void)
+{
+}
+
+UiApp*
+CallApp::CreateInstance(void)
+{
+       // Create the instance through the constructor.
+       return new CallApp();
+}
+
+bool
+CallApp::OnAppInitializing(AppRegistry& appRegistry)
+{
+       AppControlProviderManager* pProviderMgr = AppControlProviderManager::GetInstance();
+       pProviderMgr->SetAppControlProviderEventListener(this);
+       return true;
+}
+
+bool
+CallApp::OnAppInitialized(void)
+{
+       // TODO:
+       // Comment.
+
+       // Create a Frame
+       CallAppFrame* pCallAppFrame = new CallAppFrame();
+       pCallAppFrame->Construct();
+       pCallAppFrame->SetName(L"CallApp");
+       AddFrame(*pCallAppFrame);
+
+       //Check if there is no initial scene, then exit application.
+       //This case will normally come when invalid AppControl request has come,
+       //or incoming call is coming from unknown number and "reject unknown number" settings is enabled.
+       if (GetInitialScene().IsEmpty() == true)
+       {
+               return false;
+       }
+
+       return true;
+}
+
+bool
+CallApp::OnAppWillTerminate(void)
+{
+       // TODO:
+       // Comment.
+       return true;
+}
+
+bool
+CallApp::OnAppTerminating(AppRegistry& appRegistry, bool forcedTermination)
+{
+       // TODO:
+       // Deallocate resources allocated by this App for termination.
+       // The App's permanent data and context can be saved via appRegistry.
+       return true;
+}
+
+void
+CallApp::OnForeground(void)
+{
+       IEnumerator* pEnum = __listenerList.GetEnumeratorN();
+       while (pEnum->MoveNext() == E_SUCCESS)
+       {
+               IAppStateChangeListener* pInterface = static_cast<IAppStateChangeListener*>(pEnum->GetCurrent());
+               if (pInterface == null)
+               {
+                       delete pEnum;
+
+                       return;
+               }
+               pInterface->OnForeground();
+       }
+       delete pEnum;
+}
+
+void
+CallApp::OnBackground(void)
+{
+       // TODO:
+       // Stop drawing when the application is moved to the background.
+}
+
+void
+CallApp::OnLowMemory(void)
+{
+       // TODO:
+       // Free unused resources or close the application.
+}
+
+void
+CallApp::OnBatteryLevelChanged(BatteryLevel batteryLevel)
+{
+       // TODO:
+       // Handle any changes in battery level here.
+       // Stop using multimedia features(camera, mp3 etc.) if the battery level is CRITICAL.
+}
+
+void
+CallApp::OnScreenOn(void)
+{
+       // TODO:
+       // Get the released resources or resume the operations that were paused or stopped in OnScreenOff().
+}
+
+void
+CallApp::OnScreenOff(void)
+{
+       // TODO:
+       // Unless there is a strong reason to do otherwise, release resources (such as 3D, media, and sensors) to allow the device
+       // to enter the sleep mode to save the battery.
+       // Invoking a lengthy asynchronous method within this listener method can be risky, because it is not guaranteed to invoke a
+       // callback before the device enters the sleep mode.
+       // Similarly, do not perform lengthy operations in this listener method. Any operation must be a quick one.
+}
+
+SceneId
+CallApp::GetInitialScene(void)
+{
+       return __initialSceneId;
+}
+
+IList*
+CallApp::GetAppLaunchArguments(void)
+{
+       return __pLaunchArgs;
+}
+
+void
+CallApp::AddAppStateChangeListener(const IAppStateChangeListener& listener)
+{
+       __listenerList.Add(listener);
+
+}
+void
+CallApp::RemoveAppStateChangeListener(const IAppStateChangeListener& listener)
+{
+       __listenerList.Remove(listener);
+}
+
+void
+CallApp::OnAppControlRequestReceived(RequestId reqId, const String& operationId, const String* pUriData,
+               const String* pMimeType, const IMap* pExtraData)
+{
+       AppLogDebug("ENTER");
+       //process AppControl parameters
+       ProcessAppControlRequest(reqId, operationId, pExtraData);
+       AppLogDebug("EXIT");
+}
+
+void
+CallApp::ProcessAppControlRequest(RequestId reqId, const String& operationId,const IMap* pArgsMap)
+{
+       AppLogDebug("Enter %ls",operationId.GetPointer());
+       __pLaunchArgs = null;
+       if(operationId.Equals(OPERATION_ID_CALL,true) == true)
+       {
+               AppLogDebug("OPERATION_ID_CALL");
+               if(pArgsMap != null)
+               {
+                       bool isIncomingCallRequest = false;
+                       String* pKey = new (std::nothrow) String(LAUNCHTYPE);
+                       if (pArgsMap->ContainsKey(*pKey) == true)
+                       {
+                               const String* pValue = static_cast<const String*>(pArgsMap->GetValue(*pKey));
+                               if ((pValue != null) && (pValue->Equals(PARAM_ORIGIN_MT, true) == true))
+                               {
+                                       isIncomingCallRequest = true;
+                               }
+                       }
+                       //Check if incoming call request or outgoing call request
+                       if(isIncomingCallRequest == true)
+                       {
+                               HandleIncomingCallAppControlRequest(reqId, pArgsMap);
+                       }
+                       else
+                       {
+                               HandleDialCallAppControlRequest(reqId, pArgsMap);
+                       }
+               }
+               else
+               {
+                       AppLogDebug("pArgsMap == null");
+               }
+       }
+}
+
+void
+CallApp::HandleIncomingCallAppControlRequest(RequestId reqId,const IMap* pArgsMap)
+{
+       AppLogDebug("Enter");
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       //response message
+       AppCtrlResult appControlResult = APP_CTRL_RESULT_FAILED;
+
+       //call handle
+       String callHandle(L"");
+       String* pKey = new (std::nothrow) String(CALL_HANDLE);
+       if (pArgsMap->ContainsKey(*pKey) == true)
+       {
+               const String* pValue = static_cast<const String*>(pArgsMap->GetValue(*pKey));
+               if (pValue != null)
+               {
+                       callHandle.Append(*pValue);
+               }
+       }
+       delete pKey;
+       //contact number
+       String contactNumber(L"");
+       pKey = new (std::nothrow) String(CONTACT_NUMBER);
+       if (pArgsMap->ContainsKey(*pKey) == true)
+       {
+               const String* pContactValue = static_cast<const String*>(pArgsMap->GetValue(*pKey));
+               if (pContactValue != null)
+               {
+                       contactNumber.Append(*pContactValue);
+                       AppLogDebug("%ls",contactNumber.GetPointer());
+               }
+       }
+       delete pKey;
+       pKey = null;
+
+       //Fetch incoming call details
+       CallPresentationModel* pCallPresentor = CallPresentationModel::GetInstance();
+       CallInfo* pIncomingCall = pCallPresentor->FetchIncomingCallDetailsN(callHandle, contactNumber);
+       if(pIncomingCall != null)
+       {
+               bool isCallRejected = pCallPresentor->CheckIncomingCallToBeRejected(pIncomingCall);
+               if(isCallRejected == false)
+               {
+                       //save app launch argument list
+                       __pLaunchArgs = new (std::nothrow) ArrayList(SingleObjectDeleter);
+                       __pLaunchArgs->Construct(1);
+                       __pLaunchArgs->Add(pIncomingCall);
+                       if(__initialSceneId.IsEmpty() == true)
+                       {
+                               __initialSceneId = IDSCN_SCENE_INCOMINGCALL;
+                       }
+                       else
+                       {
+                               //App already initialized, goto incoming call form
+                               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_INCOMINGCALL), __pLaunchArgs);
+                               __pLaunchArgs = null;
+                       }
+               }
+               else
+               {
+                       //Show messageBox showing automatic call rejection
+                       MessageBox callRejectedInoMsgBox;
+                       String msg(L"Call From ");
+                       msg.Append(contactNumber);
+                       msg.Append(L" Rejected.");
+                       callRejectedInoMsgBox.Construct(L"Call Rejected", msg, MSGBOX_STYLE_NONE,1000);
+                       int modalResult = 0;
+                       // Calls ShowAndWait() : Draws and Shows itself and processes events
+                       callRejectedInoMsgBox.ShowAndWait(modalResult);
+
+                       //go back to previous scene if App was already running, else exit application.
+                       if(__initialSceneId.IsEmpty() == true)
+                       {
+                               //KEEP "__initialSceneId" as empty and return false from "OnAppInitialized()"
+                               AppLog("Terminate Phone Application");
+                               Terminate();
+                       }
+
+               }
+               //set success message
+               appControlResult = APP_CTRL_RESULT_SUCCEEDED;
+       }
+       else
+       {
+               appControlResult = APP_CTRL_RESULT_FAILED;
+       }
+       AppLogDebug("Exiting %d",appControlResult);
+       AppControlProviderManager::GetInstance()->SendAppControlResult(reqId, appControlResult, null);
+}
+
+void
+CallApp::HandleDialCallAppControlRequest(RequestId reqId,const IMap* pArgsMap)
+{
+       //response message
+       AppCtrlResult appControlResult = APP_CTRL_RESULT_FAILED;
+
+       if (pArgsMap != null)
+       {
+               String callType(L"");
+               String phoneNumber(L"");
+               //phone number
+               String* pKey = new (std::nothrow) String(PARAM_PHONE_NUMBER);
+               if(pArgsMap->ContainsKey(*pKey) == true)
+               {
+                       const String* pPhoneValue = static_cast<const String*>(pArgsMap->GetValue(*pKey));
+                       if(pPhoneValue != null)
+                       {
+                               AppLogDebug("%ls",pPhoneValue->GetPointer());
+                               phoneNumber.Append(*pPhoneValue);
+                       }
+               }
+               else
+               {
+                       AppLogDebug("PARAM_PHONE_NUMBER not present");
+               }
+               delete pKey;
+               //Check if its a valid number
+               if(CheckNumberIsValid(phoneNumber) == false)
+               {
+                       //Show messageBox showing automatic call rejection
+                       MessageBox InvalidNumberMsgBox;
+                       InvalidNumberMsgBox.Construct(AppUtility::GetResourceString(IDS_INVALID_NUMBER), L"",MSGBOX_STYLE_NONE,1000);
+                       int modalResult = 0;
+                       // Calls ShowAndWait() : Draws and Shows itself and processes events
+                       InvalidNumberMsgBox.ShowAndWait(modalResult);
+
+                       //go back to previous scene if App was already running, else exit application.
+                       if(__initialSceneId.IsEmpty() == true)
+                       {
+                               //KEEP "__initialSceneId" as empty and return false from "OnAppInitialized()"
+                               AppLog("Terminate Phone Application");
+                               Terminate();
+                       }
+
+               }
+               //call type
+               pKey = new (std::nothrow) String(PARAM_CALL_TYPE);
+               if(pArgsMap->ContainsKey(*pKey) == true)
+               {
+                       const String* pCallTypeValue = static_cast<const String*>(pArgsMap->GetValue(*pKey));
+                       if(pCallTypeValue != null)
+                       {
+                               callType.Append(*pCallTypeValue);
+                       }
+               }
+               delete pKey;
+               pKey = null;
+
+               //Fetch currently active call count
+               if (callType.IsEmpty() == false
+                               && callType.Equals(PARAM_CALL_VALUE_VOICE, false) == true
+                               && phoneNumber.IsEmpty() == false)
+               {
+                       SceneManager* pSceneManager = SceneManager::GetInstance();
+                       //check if there is already a call in dialing mode, then dont accept any other dialing request.
+                       if (pSceneManager->GetCurrentSceneId() == IDSCN_SCENE_OUTCALL
+                                       || pSceneManager->GetCurrentSceneId()
+                                                       == IDSCN_SCENE_OUT_EMERGENCYCALL)
+                       {
+                               AppLog("Cancelled");
+                               appControlResult = APP_CTRL_RESULT_CANCELED;
+                               AppControlProviderManager::GetInstance()->SendAppControlResult(reqId, appControlResult, null);
+                               return;
+                       }
+                       CallPresentationModel* pCallPresentor = CallPresentationModel::GetInstance();
+                       int currentActiveCallCount = pCallPresentor->GetCurrentCallCount();
+                       if(currentActiveCallCount <= 1)
+                       {
+                               //make an outgoing call with given number
+                               String* contactTxt = new (std::nothrow) String(phoneNumber);
+                               __pLaunchArgs =  new (std::nothrow) ArrayList(SingleObjectDeleter);
+                               __pLaunchArgs->Construct();
+                               __pLaunchArgs->Add(contactTxt);
+                               bool isEmergencyCall = pCallPresentor->IsEmergencyNumber(*contactTxt, true);
+
+                               SceneId nextScene = IDSCN_SCENE_OUTCALL;
+                               if (isEmergencyCall)
+                               {
+                                       nextScene = IDSCN_SCENE_OUT_EMERGENCYCALL;
+                               }
+                               //Check if app was already running
+                               if(__initialSceneId.IsEmpty() == true)
+                               {
+                                       //phone App is not already launched
+                                       __initialSceneId = nextScene;
+                               }
+                               else
+                               {
+                                       pSceneManager->GoForward( ForwardSceneTransition( nextScene), __pLaunchArgs);
+                               }
+                               appControlResult = APP_CTRL_RESULT_SUCCEEDED;
+                       }
+                       else
+                       {
+                               //already 2 active calls, 3rd call not allowed
+                               appControlResult = APP_CTRL_RESULT_CANCELED;
+                       }
+               }
+               else
+               {
+                       appControlResult = APP_CTRL_RESULT_FAILED;
+               }
+       }
+       //send response message
+       AppControlProviderManager::GetInstance()->SendAppControlResult(reqId, appControlResult, null);
+}
+
+bool
+CallApp::CheckNumberIsValid(String phoneNumber)
+{
+       //Pattern to compare all characters except 0-9 * # P ; , +
+       String phoneNumberPattern(L"[^0-9*#P;,+]");
+       RegularExpression checkPhoneNumber;
+       checkPhoneNumber.Construct(phoneNumberPattern);
+       //If there is any character other than these listed above then display invalid number
+       bool resultMatch = checkPhoneNumber.Match(phoneNumber,false);
+       //return false for patterns other than 0-9 * # P ; , +
+       return !resultMatch;
+
+}
diff --git a/src/CallAppEntry.cpp b/src/CallAppEntry.cpp
new file mode 100644 (file)
index 0000000..f31e6aa
--- /dev/null
@@ -0,0 +1,37 @@
+//
+// This file contains the Tizen application entry point.
+//
+#include "CallApp.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+
+#ifdef __cplusplus
+extern "C"
+{
+#endif // __cplusplus
+
+
+//
+// The entry function of Tizen application called by the operating system.
+//
+_EXPORT_ int
+OspMain(int argc, char* pArgv[])
+{
+       AppLog("Application started.");
+       ArrayList args(SingleObjectDeleter);
+       args.Construct();
+       for (int i = 0; i < argc; i++)
+       {
+               args.Add(new (std::nothrow) String(pArgv[i]));
+       }
+
+       result r = Tizen::App::UiApp::Execute(CallApp::CreateInstance, &args);
+       TryLog(r == E_SUCCESS, "[%s] Application execution failed", GetErrorMessage(r));
+       AppLog("Application finished.");
+
+       return static_cast<int>(r);
+}
+#ifdef __cplusplus
+}
+#endif // __cplusplus
diff --git a/src/CallAppFrame.cpp b/src/CallAppFrame.cpp
new file mode 100644 (file)
index 0000000..16df5be
--- /dev/null
@@ -0,0 +1,54 @@
+#include "CallApp.h"
+#include "CallAppFrame.h"
+#include "CallPhoneFormFactory.h"
+#include "CallPanelFactory.h"
+#include "CallSceneRegister.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+
+
+CallAppFrame::CallAppFrame(void)
+{
+}
+
+CallAppFrame::~CallAppFrame(void)
+{
+}
+
+result
+CallAppFrame::OnInitializing(void)
+{
+       result r = E_FAILURE;
+       CallApp* pPhoneApp = static_cast<CallApp*>(UiApp::GetInstance());
+       AppLogDebug("Enter");
+
+       //Initialize factory methods and register all scenes.
+       r = SceneRegister::RegisterAllScenes();
+       TryReturn(r == E_SUCCESS, r , "Scene registration failed");
+
+       //start initial Form
+       if (pPhoneApp->GetInitialScene().IsEmpty() == false)
+       {
+               //goto next scene
+               SceneManager* pSceneManager = SceneManager::GetInstance();
+               r = pSceneManager->GoForward( ForwardSceneTransition(pPhoneApp->GetInitialScene(),
+                               SCENE_TRANSITION_ANIMATION_TYPE_NONE, SCENE_HISTORY_OPTION_NO_HISTORY),
+                               pPhoneApp->GetAppLaunchArguments());
+       }
+       AppLogDebug("Exit %d",r);
+       return r;
+}
+
+result
+CallAppFrame::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+
+       // TODO:
+       // Add your termination code here
+       return r;
+}
diff --git a/src/CallAppMainForm.cpp b/src/CallAppMainForm.cpp
new file mode 100644 (file)
index 0000000..e430387
--- /dev/null
@@ -0,0 +1,101 @@
+#include <FApp.h>
+#include "CallAppMainForm.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::App;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+
+
+CallAppMainForm::CallAppMainForm(void)
+{
+}
+
+CallAppMainForm::~CallAppMainForm(void)
+{
+}
+
+bool
+CallAppMainForm::Initialize(void)
+{
+       Construct(L"IDF_FORM");
+
+       return true;
+}
+
+result
+CallAppMainForm::OnInitializing(void)
+{
+       result r = E_SUCCESS;
+
+       // TODO:
+       // Add your initialization code here
+
+       // Setup back event listener
+       SetFormBackEventListener(this);
+
+       // Get a button via resource ID
+       Tizen::Ui::Controls::Button *pButtonOk = static_cast<Button*>(GetControl(L"IDC_BUTTON_OK"));
+       if (pButtonOk != null)
+       {
+               pButtonOk->SetActionId(ID_BUTTON_OK);
+               pButtonOk->AddActionEventListener(*this);
+       }
+
+       return r;
+}
+
+result
+CallAppMainForm::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+
+       // TODO:
+       // Add your termination code here
+       return r;
+}
+
+void
+CallAppMainForm::OnActionPerformed(const Tizen::Ui::Control& source, int actionId)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       AppAssert(pSceneManager);
+
+       switch(actionId)
+       {
+       case ID_BUTTON_OK:
+               AppLog("OK Button is clicked!");
+               break;
+
+       default:
+               break;
+       }
+}
+
+void
+CallAppMainForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
+{
+       UiApp* pApp = UiApp::GetInstance();
+       AppAssert(pApp);
+       pApp->Terminate();
+}
+
+void
+CallAppMainForm::OnSceneActivatedN(const Tizen::Ui::Scenes::SceneId& previousSceneId,
+                                                                                 const Tizen::Ui::Scenes::SceneId& currentSceneId, Tizen::Base::Collection::IList* pArgs)
+{
+       // TODO:
+       // Add your scene activate code here
+       AppLog("OnSceneActivatedN");
+}
+
+void
+CallAppMainForm::OnSceneDeactivated(const Tizen::Ui::Scenes::SceneId& currentSceneId,
+                                                                                  const Tizen::Ui::Scenes::SceneId& nextSceneId)
+{
+       // TODO:
+       // Add your scene deactivate code here
+       AppLog("OnSceneDeactivated");
+}
+
diff --git a/src/CallAppUtility.cpp b/src/CallAppUtility.cpp
new file mode 100644 (file)
index 0000000..04acea6
--- /dev/null
@@ -0,0 +1,65 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file       PhnAppUtility.cpp
+ * @brief      Utility Class for Phone Application
+ */
+#include <FApp.h>
+#include "CallAppUtility.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Graphics;
+
+AppUtility::AppUtility(void)
+{
+}
+
+AppUtility::~AppUtility(void)
+{
+}
+
+String
+AppUtility::GetResourceString(const String& stringId)
+{
+       String resourceString(L"");
+       AppResource* pAppResource = AppResource::GetInstance();
+       if (pAppResource)
+       {
+               pAppResource->GetString(stringId, resourceString);
+       }
+
+       return resourceString;
+}
+
+Bitmap*
+AppUtility::GetBitmapFromResourcesN(const String& imagePath, int imgWidth, int imgHeight)
+{
+       Bitmap* pBitmap = null;
+       AppResource* pAppResource = AppResource::GetInstance();
+       if (pAppResource)
+       {
+               pBitmap = pAppResource->GetBitmapN(imagePath);
+               if (pBitmap && imgWidth > 0 && imgHeight > 0)
+               {
+                       //scale bitmap to predefined size
+                       pBitmap->SetScalingQuality(BITMAP_SCALING_QUALITY_MID);
+                       pBitmap->Scale(Dimension(imgWidth, imgHeight));
+               }
+       }
+       return pBitmap;
+}
diff --git a/src/CallBaseForm.cpp b/src/CallBaseForm.cpp
new file mode 100644 (file)
index 0000000..6f4df3b
--- /dev/null
@@ -0,0 +1,380 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file       CallBaseForm.cpp
+ * @brief      Base class for all Call forms
+ */
+#include "CallActiveCallForm.h"
+#include "CallBaseForm.h"
+#include "CallInfo.h"
+#include "CallPresentationModel.h"
+#include "CallConfCallerListForm.h"
+#include "CallPhoneFormFactory.h"
+#include "CallSceneRegister.h"
+#include "CallApp.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Ui;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Scenes;
+using namespace Tizen::Ui::Controls;
+
+BaseForm::BaseForm(FormType formType)
+               : __formType(formType)
+{
+       __pCallPresentor = null;
+       __pErrorMsgPopup = null;
+}
+
+BaseForm::~BaseForm(void)
+{
+}
+
+result
+BaseForm::OnInitializing(void)
+{
+       //To be implemented in sub classes
+       return E_SUCCESS;
+}
+
+void
+BaseForm::OnActionPerformed(const Control& source, int actionId)
+{
+}
+
+/////////////////////////////////////////////////////////////////
+/////  Event Listener methods from ITelephonyEventListener  /////
+/////////////////////////////////////////////////////////////////
+
+void
+BaseForm::HandleCallConnected(IListT<CallInfo>& pCallList)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+
+       switch (__formType)
+       {
+       case FORMTYPE_OUTGOINGCALL:
+       case FORMTYPE_INCOMINGCALL:
+       case FORMTYPE_CONFCALLLIST:
+       case FORMTYPE_ACTIVECALL:
+       case FORMTYPE_ACTIVECONFCALL:
+       {
+               int noOfCalls = pCallList.GetCount();
+               //Ownership - To be deleted in 'OnSceneActivatedN' of next form
+               ArrayList* pCallInfoList = new (std::nothrow) ArrayList(SingleObjectDeleter);
+               pCallInfoList->Construct(noOfCalls);
+
+               for (int index = 0; index < noOfCalls; index++)
+               {
+                       //fetch call info and add to list
+                       CallInfo callInfo;
+                       result r = pCallList.GetAt(index, callInfo);
+                       if (r == E_SUCCESS)
+                       {
+                               //copy call information to new instance
+                               CallInfo* pCaller = new (std::nothrow) CallInfo();
+                               *pCaller = callInfo;
+                               pCallInfoList->Add(pCaller);
+                       }
+               }
+
+               if (noOfCalls == 1)
+               {
+                       //Check if active call is conference call
+                       CallInfo* pActiveCallInfo = static_cast<CallInfo*>(pCallInfoList->GetAt(0));
+                       if(pActiveCallInfo->IsConferenceCall() == true)
+                       {
+                               //single Conference call - goto active Conf. call form
+                               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_CONFCALL), pCallInfoList);
+                       }
+                       else
+                       {
+                               //single active call - goto active call form
+                               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_ACTIVECALL), pCallInfoList);
+                       }
+               }
+               else if(noOfCalls == 2)
+               {
+                       //goto multiple active call form
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_MULTIPLEACTIVECALL), pCallInfoList);
+               }
+       }
+       break;
+
+       case FORMTYPE_MULTIPLECALLS:
+       {
+               //This case can come on Multiple Calls screen, when one of the calls is conference call with 2 participants
+               //and one of the participants exits himself from ConfCall.
+               int noOfCalls = pCallList.GetCount();
+               AppLogDebug("Active Call Count = %d", noOfCalls);
+               //this is just a safety check, call count will aleays be 2 here.
+               ActiveCallForm* pActiveCallForm = dynamic_cast<ActiveCallForm*>(this);
+               if(noOfCalls == IDI_MAX_ACTIVE_CALLS && pActiveCallForm != null)
+               {
+                       //update calls state
+                       pActiveCallForm->UpdateMultipleCallScreen(pCallList);
+               }
+       }
+       break;
+
+       case FORMTYPE_EMERGENCYOUTGOINGCALL:
+       {
+               //Ownership - To be deleted in 'OnSceneActivatedN' of next form
+               ArrayList* pCallInfoList = new (std::nothrow) ArrayList(SingleObjectDeleter);
+               pCallInfoList->Construct(1);
+
+               //fetch call info and add to list
+               CallInfo callInfo;
+               result r = pCallList.GetAt(0, callInfo);
+               if (r == E_SUCCESS)
+               {
+                       //copy call information to new instance
+                       CallInfo* pCaller = new (std::nothrow) CallInfo();
+                       *pCaller = callInfo;
+                       pCallInfoList->Add(pCaller);
+                       //single active call - goto active call form
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_ACTIVE_EMERGENCYCALL), pCallInfoList);
+               }
+       }
+       break;
+
+       default:
+               break;
+       }
+}
+
+void
+BaseForm::HandleCallDisconnected(bool isLastCall, IListT<CallInfo>& pCallList)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       CallApp* pPhoneApp = static_cast<CallApp*>(UiApp::GetInstance());
+
+       int callCount = pCallList.GetCount();
+       if (callCount > 0)
+       {
+               //Ownership - To be deleted in 'OnSceneActivatedN' of next form
+               ArrayList* pCallInfoList = new (std::nothrow) ArrayList(SingleObjectDeleter);
+               pCallInfoList->Construct(callCount);
+               for (int index = 0; index < callCount; index++)
+               {
+                       //fetch call info and add to list
+                       CallInfo callInfo;
+                       result r = pCallList.GetAt(index, callInfo);
+                       if (r == E_SUCCESS)
+                       {
+                               //copy call information to new instance
+                               CallInfo* pCaller = new (std::nothrow) CallInfo();
+                               *pCaller = callInfo;
+                               pCallInfoList->Add(pCaller);
+                       }
+               }
+               if (callCount == 1)
+               {
+                       //fetch call info and add to list
+                       CallInfo callInfo;
+                       result r = pCallList.GetAt(0, callInfo);
+                       if (r == E_SUCCESS)
+                       {
+                               //copy call information to new instance
+                               CallInfo* pCaller = new (std::nothrow) CallInfo();
+                               *pCaller = callInfo;
+                               pCallInfoList->Add(pCaller);
+                       }
+
+                       if (isLastCall == true)
+                       {
+                               //goto End Call form if single call. else terminate
+                               if (callInfo.IsConferenceCall() == false)
+                               {
+                                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_ENDCALL), pCallInfoList);
+                               }
+                               else
+                               {
+                                       pPhoneApp->Terminate();
+                               }
+                       }
+                       else
+                       {
+                               if (pCallList.GetCount() == 1)
+                               {
+                                       if (callInfo.IsConferenceCall() == true)
+                                       {
+                                               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_CONFCALL), pCallInfoList);
+                                       }
+                                       else
+                                       {
+                                               //goto Single Active Call form
+                                               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_ACTIVECALL), pCallInfoList);
+                                       }
+                               }
+                       }
+               }
+               else
+               {
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_MULTIPLEACTIVECALL), pCallInfoList);
+               }
+       }
+       else
+       {
+               pPhoneApp->Terminate();
+       }
+}
+
+
+void
+BaseForm::HandleConferenceCall(CallInfo& pCallInfo)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+
+       //Ownership - To be deleted in 'OnSceneActivatedN' of next form
+       ArrayList* pCallInfoList = new (std::nothrow) ArrayList(SingleObjectDeleter);
+       pCallInfoList->Construct(1);
+
+       //update list to be passed
+       CallInfo* pConfInfo = new (std::nothrow) CallInfo();
+       *pConfInfo = pCallInfo;
+       pCallInfoList->Add(pConfInfo);
+
+       //Todo: create screens for single conf call and conf call with another held call
+       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_CONFCALL), pCallInfoList);
+}
+
+void
+BaseForm::HandleIncomingCall(CallInfo& pCallInfo)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+
+       //Ownership - To be deleted in 'OnSceneActivatedN' of next form
+       ArrayList* pCallInfoList = new (std::nothrow) ArrayList(SingleObjectDeleter);
+       pCallInfoList->Construct(1);
+
+       //update list to be passed
+       CallInfo* pIncomingCall = new (std::nothrow) CallInfo();
+       *pIncomingCall = pCallInfo;
+       pCallInfoList->Add(pIncomingCall);
+
+       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_INCOMINGCALL), pCallInfoList);
+}
+
+void
+BaseForm::HandleCallSwapOccured(IListT<CallInfo>& pCallList)
+{
+       int noOfCalls = pCallList.GetCount();
+       if(noOfCalls != IDI_MAX_ACTIVE_CALLS && __formType != FORMTYPE_MULTIPLECALLS)
+       {
+               return;
+       }
+       ActiveCallForm* pActiveCallForm = dynamic_cast<ActiveCallForm*>(this);
+       if(pActiveCallForm != null)
+       {
+               //update calls state
+               pActiveCallForm->UpdateMultipleCallScreen(pCallList);
+       }
+}
+
+void
+BaseForm::HandleConferenceChange(void)
+{
+       switch (__formType)
+       {
+       case FORMTYPE_CONFCALLLIST:
+       {
+               ConfCallerListForm* pConfCallerListForm = dynamic_cast<ConfCallerListForm*>(this);
+               if(pConfCallerListForm != null)
+               {
+                       pConfCallerListForm->HandleParticipantsChanged();
+               }
+       }
+               break;
+
+       case FORMTYPE_ACTIVECONFCALL:
+       case FORMTYPE_MULTIPLECALLS:
+       {
+               ActiveCallForm* pActiveCallForm = dynamic_cast<ActiveCallForm*>(this);
+               if(pActiveCallForm != null)
+               {
+                       pActiveCallForm->HandleConfCallChanged();
+               }
+       }
+               break;
+       default:
+               break;
+       }
+}
+
+void
+BaseForm::HandleTelephonyError(int errorCode)
+{
+       //show error msg Popup
+       if (__pErrorMsgPopup == null)
+       {
+               __pErrorMsgPopup = new (std::nothrow) ErrorMsgPopup(this);
+       }
+       __pErrorMsgPopup->ShowErrorMsgPopupN(errorCode);
+}
+
+void
+BaseForm::HandlePopupClosed(void)
+{
+       Draw();
+       delete __pErrorMsgPopup;
+       __pErrorMsgPopup = null;
+
+       switch(__formType)
+       {
+       case FORMTYPE_OUTGOINGCALL:
+       {
+               //fetch no of calls from telephony
+               CallPresentationModel* pPresentor = CallPresentationModel::GetInstance();
+               if(pPresentor != null)
+               {
+                       //check if any call is present
+                       if(pPresentor->GetCurrentCallCount() > 0)
+                       {
+                               //fetch current call list
+                               IListT<CallInfo>* pCurrentCallList = pPresentor->GetCallListN();
+                               HandleCallDisconnected(false,*pCurrentCallList);
+                               delete pCurrentCallList;
+                               pCurrentCallList = null;
+                       }
+                       else
+                       {
+                               //No more calls are active
+                               CallApp* pPhoneApp = static_cast<CallApp*>(UiApp::GetInstance());
+                               pPhoneApp->Terminate();
+
+                       }
+               }
+       }
+       break;
+
+       case FORMTYPE_ENDCALL:
+       {
+               //It comes here, only when we make voice call for Last call from EndCallForm
+               //and some TAPI error is encountered.
+               CallApp* pPhoneApp = static_cast<CallApp*>(UiApp::GetInstance());
+               pPhoneApp->Terminate();
+       }
+       break;
+
+       default:
+       break;
+       }
+}
+
diff --git a/src/CallButtonsPanel.cpp b/src/CallButtonsPanel.cpp
new file mode 100644 (file)
index 0000000..0da8e83
--- /dev/null
@@ -0,0 +1,710 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file       CallButtonsPanel.cpp
+ * @brief      Base class for all Call forms
+ */
+#include "CallButtonsPanel.h"
+#include "CallAppUtility.h"
+#include "CallTypes.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Graphics;
+
+//Constants - Scene name
+const wchar_t* IDC_ADDJOINCALL_BUTTON = L"IDC_ADDJOINCALL_BUTTON";
+const wchar_t* IDC_KEYPAD_BUTTON = L"IDC_KEYPAD_BUTTON";
+const wchar_t* IDC_MUTE_BUTTON = L"IDC_MUTE_BUTTON";
+const wchar_t* IDC_CONTACT_BUTTON = L"IDC_CONTACT_BUTTON";
+const wchar_t* IDC_SPEAKER_BUTTON = L"IDC_SPEAKER_BUTTON";
+const wchar_t* IDC_VOICECALL_BUTTON = L"IDC_VOICECALL_BUTTON";
+const wchar_t* IDC_VIDEOCALL_BUTTON = L"IDC_VIDEOCALL_BUTTON";
+const wchar_t* IDC_MSG_BUTTON = L"IDC_MSG_BUTTON";
+const wchar_t* IDC_ENDCALL_BUTTON = L"IDC_ENDCALL_BUTTON";
+const wchar_t* IDC_ADD_TO_CONTACT_BUTTON = L"IDC_ADD_TO_CONTACT_BUTTON";
+
+//Button Dimensions
+const int W_BG_BITMAP = 80;
+const int H_BG_BITMAP = 80;
+const int Y_BG_BITMAP_POS = 56;
+const int IDI_TEXT_SIZE = 38;
+const int IDI_VERTICAL_SPACE = 6;
+const int W_VIEW_CONTACT_BITMAP = 50;
+const int H__VIEW_CONTACT_BITMAP = 50;
+const int Y_VIEW_CONTACT_BITMAP_POS = 14;
+const int W_KEYPAD_BTN = 240;
+const int H_KEYPAD_BTN = 250;
+
+CallButtonsPanel::CallButtonsPanel(void)
+{
+}
+
+CallButtonsPanel::~CallButtonsPanel(void)
+{
+       //Empty Implementation
+}
+
+bool
+CallButtonsPanel::ConstructPanel(IActionEventListener* pEventListener, FormType parentFormType)
+{
+       if (pEventListener == null)
+       {
+               return false;
+       }
+
+       result r = E_SUCCESS;
+
+       //set action listener & save form state
+       __pActionListener = pEventListener;
+       __parentFormType = parentFormType;
+
+       switch (__parentFormType)
+       {
+       case FORMTYPE_ENDCALL:
+               r = Construct(IDL_END_CALL_PANEL);
+               break;
+
+       default:
+               r = Construct(IDL_CALL_PANEL);
+               break;
+       }
+       TryCatch(r == E_SUCCESS, , "CallButtonsPanel::Initialise() resource not found");
+
+       return true;
+CATCH:
+       return false;
+}
+
+result
+CallButtonsPanel::OnInitializing(void)
+{
+       result r = E_FAILURE;
+
+       RelativeLayout* pRelativeLayout = dynamic_cast<RelativeLayout*>(GetParent()->GetLandscapeLayoutN());
+       if (pRelativeLayout != null)
+       {
+               pRelativeLayout->Update();
+               delete pRelativeLayout;
+       }
+
+       pRelativeLayout = dynamic_cast<RelativeLayout*>(GetParent()->GetPortraitLayoutN());
+       if (pRelativeLayout != null)
+       {
+               pRelativeLayout->Update();
+               delete pRelativeLayout;
+       }
+
+       //set buttons as child controls
+       switch (__parentFormType)
+       {
+       case FORMTYPE_ENDCALL:
+               r = ConstructEndCallPanel();
+               break;
+
+       default:
+               r = ConstructActiveCallPanel();
+               break;
+       }
+
+       if (IsFailed(r))
+       {
+               return r;
+       }
+       SetButtonPosition();
+       Draw();
+       Show();
+       return r;
+}
+
+result
+CallButtonsPanel::OnTerminating(void)
+{
+       //remove all child controls...
+       RemoveAllControls();
+       return E_SUCCESS;
+}
+
+void
+CallButtonsPanel::SetSpeakerButtonState(CommandIds cmdId)
+{
+       //Speaker
+       String speakerButtonId(IDC_SPEAKER_BUTTON);
+       Button* pButton = static_cast<Button*>(GetControl(speakerButtonId));
+       //Check if Button exist and needs to change state.
+       if(pButton == null || pButton->GetActionId() == cmdId)
+       {
+               return;
+       }
+
+       String btnName = AppUtility::GetResourceString(IDS_SPEAKER_BTN_NAME);
+       AddKeyPadActionListener(speakerButtonId, cmdId);
+       switch (cmdId)
+       {
+               case IDA_SPEAKER:
+               {
+                       SetBitmapsToButton(speakerButtonId, btnName, IDB_SPEAKER_OFF_ICON, BTN_NORMAL);
+                       SetBitmapsToButton(speakerButtonId, btnName, IDB_SPEAKER_OFF_PRESS_ICON, BTN_PRESS);
+                       SetBitmapsToButton(speakerButtonId, btnName, IDB_SPEAKER_OFF_DIM_ICON, BTN_DIM);
+               }
+               break;
+
+               case IDA_SPEAKER_OFF:
+               {
+                       SetBitmapsToButton(speakerButtonId, btnName, IDB_SPEAKER_ON_ICON, BTN_NORMAL);
+                       SetBitmapsToButton(speakerButtonId, btnName, IDB_SPEAKER_ON_PRESS_ICON, BTN_PRESS);
+                       SetBitmapsToButton(speakerButtonId, btnName, IDB_SPEAKER_ON_DIM_ICON, BTN_DIM);
+               }
+               break;
+
+               default:
+               break;
+       }
+}
+
+void
+CallButtonsPanel::SetMuteButtonState(CommandIds cmdId)
+{
+       String muteButtonId(IDC_MUTE_BUTTON);
+       Button* pButton = static_cast<Button*>(GetControl(muteButtonId));
+       //Check if Button exist and needs to change state.
+       if(pButton == null || pButton->GetActionId() == cmdId)
+       {
+               return;
+       }
+
+       String btnName = AppUtility::GetResourceString(IDS_MUTE_BTN_NAME);
+       AddKeyPadActionListener(muteButtonId, cmdId);
+       switch(cmdId)
+       {
+               case IDA_UNMUTE:
+               {
+                       SetBitmapsToButton(muteButtonId, btnName, IDB_MUTE_ON_ICON, BTN_NORMAL);
+                       SetBitmapsToButton(muteButtonId, btnName, IDB_MUTE_ON_PRESS_ICON, BTN_PRESS);
+                       SetBitmapsToButton(muteButtonId, btnName, IDB_MUTE_ON_DIM_ICON, BTN_DIM);
+               }
+               break;
+
+               case IDA_MUTE:
+               {
+                       SetBitmapsToButton(muteButtonId, btnName, IDB_MUTE_OFF_ICON, BTN_NORMAL);
+                       SetBitmapsToButton(muteButtonId, btnName, IDB_MUTE_OFF_PRESS_ICON, BTN_PRESS);
+                       SetBitmapsToButton(muteButtonId, btnName, IDB_MUTE_OFF_DIM_ICON, BTN_DIM);
+               }
+               break;
+
+               default:
+               break;
+       }
+}
+
+void
+CallButtonsPanel::SetKeypadButtonState(CommandIds cmdId)
+{
+       String keypadButtonId(IDC_KEYPAD_BUTTON);
+       Button* pButton = static_cast<Button*>(GetControl(keypadButtonId));
+       //Check if Button exist and needs to change state.
+       if(pButton == null || pButton->GetActionId() == cmdId)
+       {
+               return;
+       }
+
+       String btnName = AppUtility::GetResourceString(IDS_KEYPAD_BTN_NAME);
+       AddKeyPadActionListener(keypadButtonId, cmdId);
+       switch (cmdId)
+       {
+       case IDA_CLOSE_NUMKEYPAD:
+       {
+               SetBitmapsToButton(keypadButtonId, btnName, IDB_CLOSE_KEYPAD_ICON, BTN_NORMAL);
+               SetBitmapsToButton(keypadButtonId, btnName, IDB_CLOSE_KEYPAD_PRESS_ICON, BTN_PRESS);
+               SetBitmapsToButton(keypadButtonId, btnName, IDB_CLOSE_KEYPAD_DIM_ICON, BTN_DIM);
+       }
+       break;
+
+       case IDA_OPEN_NUMKEYPAD:
+       {
+               SetBitmapsToButton(keypadButtonId, btnName, IDB_CLOSE_KEYPAD_ICON, BTN_NORMAL);
+               SetBitmapsToButton(keypadButtonId, btnName, IDB_CLOSE_KEYPAD_PRESS_ICON, BTN_PRESS);
+               SetBitmapsToButton(keypadButtonId, btnName, IDB_CLOSE_KEYPAD_DIM_ICON, BTN_DIM);
+       }
+       break;
+
+       default:
+       break;
+       }
+}
+
+result
+CallButtonsPanel::AddBackgroundBitmap(void)
+{
+       result r = E_FAILURE;
+
+       Rectangle panelRect = GetBounds();
+       //Set BackGround bitmap
+       Bitmap* pBgBitmap = null;
+       AppResource* pAppResource = AppResource::GetInstance();
+       if (pAppResource)
+       {
+               pBgBitmap = pAppResource->GetBitmapN(IDB_BACKGROUND_BITMAP);
+               if (pBgBitmap)
+               {
+                       Label* pBackgroundLabel = new (std::nothrow) Label();
+                       pBackgroundLabel->Construct(Rectangle(0, 1, panelRect.width, panelRect.height), L"");
+                       pBackgroundLabel->SetBackgroundBitmap(*pBgBitmap);
+                       r = AddControl(*pBackgroundLabel);
+
+                       //always display in background
+                       SetControlAlwaysAtBottom(*pBackgroundLabel, true);
+
+                       delete pBgBitmap;
+                       pBgBitmap = null;
+               }
+       }
+       return r;
+}
+
+result
+CallButtonsPanel::ConstructEndCallPanel(void)
+{
+       result r = E_SUCCESS;
+       Rectangle relativeCtrlRect = GetBounds();
+
+       //Voice Call
+       String voiceButtonId(IDC_VOICECALL_BUTTON);
+       String btnName = AppUtility::GetResourceString(IDS_VOICE_CALL_BTN_NAME);
+       SetBitmapsToButton(voiceButtonId, btnName, IDB_VOICE_CALL_ICON, BTN_NORMAL);
+       SetBitmapsToButton(voiceButtonId, btnName, IDB_VOICE_CALL_PRESS_ICON, BTN_PRESS);
+       SetBitmapsToButton(voiceButtonId, btnName, IDB_VOICE_CALL_DIM_ICON, BTN_DIM);
+       AddKeyPadActionListener(voiceButtonId, IDA_VOICE_CALL);
+
+       //Video Call
+       String videoButtonId(IDC_VIDEOCALL_BUTTON);
+       btnName = AppUtility::GetResourceString(IDS_VIDEO_CALL_BTN_NAME);
+       SetBitmapsToButton(videoButtonId, btnName, IDB_VIDEO_CALL_ICON, BTN_NORMAL);
+       SetBitmapsToButton(videoButtonId, btnName, IDB_VIDEO_CALL_PRESS_ICON, BTN_PRESS);
+       SetBitmapsToButton(videoButtonId, btnName, IDB_VIDEO_CALL_DIM_ICON, BTN_DIM);
+       AddKeyPadActionListener(videoButtonId, IDA_VIDEO_CALL);
+
+       //Message
+       String msgButtonId(IDC_MSG_BUTTON);
+       btnName = AppUtility::GetResourceString(IDS_MSG_BTN_NAME);
+       SetBitmapsToButton(msgButtonId, btnName, IDB_MESSAGE_ICON, BTN_NORMAL);
+       SetBitmapsToButton(msgButtonId, btnName, IDB_MESSAGE_PRESS_ICON, BTN_PRESS);
+       SetBitmapsToButton(msgButtonId, btnName, IDB_MESSAGE_DIM_ICON, BTN_DIM);
+       AddKeyPadActionListener(msgButtonId, IDA_MESSAGE);
+
+       Button* pButton = static_cast<Button*>(GetControl(IDC_ADD_TO_CONTACT_BUTTON));
+       if (pButton != null)
+       {
+               AddKeyPadActionListener(IDC_ADD_TO_CONTACT_BUTTON,IDA_ADD_TO_CONTACTS);
+       }
+       //set initial show state to false. Correct state set on OnSceneActivatedN
+       SetViewContactButtonStatus(false);
+
+       return r;
+}
+
+void
+CallButtonsPanel::SetViewContactButtonStatus(bool isAddToContactPresent)
+{
+
+       //Present show View Contact else show Add to contact
+       if(isAddToContactPresent == false)
+       {
+               SetViewContacBitmapToButton(IDC_ADD_TO_CONTACT_BUTTON,AppUtility::GetResourceString(IDS_VIEW_CONTACT),
+                               IDB_VIEW_CONTACT_BG_ICON,IDB_VIEW_CONTACT_ICON,BTN_NORMAL);
+
+               SetViewContacBitmapToButton(IDC_ADD_TO_CONTACT_BUTTON,AppUtility::GetResourceString(IDS_VIEW_CONTACT),
+                               IDB_VIEW_CONTACT_BG_PRESS_ICON,IDB_VIEW_CONTACT_PRESS_ICON,BTN_PRESS);
+       }
+       else
+       {
+               SetViewContacBitmapToButton(IDC_ADD_TO_CONTACT_BUTTON,AppUtility::GetResourceString(IDS_ADD_TO_CONTACTS),
+                               IDB_VIEW_CONTACT_BG_ICON,IDB_VIEW_CONTACT_ICON,BTN_NORMAL);
+
+               SetViewContacBitmapToButton(IDC_ADD_TO_CONTACT_BUTTON,AppUtility::GetResourceString(IDS_ADD_TO_CONTACTS),
+                               IDB_VIEW_CONTACT_BG_PRESS_ICON,IDB_VIEW_CONTACT_PRESS_ICON,BTN_PRESS);
+       }
+
+}
+
+result
+CallButtonsPanel::ConstructActiveCallPanel(void)
+{
+       result r = E_SUCCESS;
+
+       //End Call
+       String endButtonId(IDC_ENDCALL_BUTTON);
+       String btnName = AppUtility::GetResourceString(IDS_ENDCALL_BTN_NAME);
+       SetBitmapsToButton(endButtonId, btnName, IDB_END_CALL_ICON, BTN_NORMAL);
+       SetBitmapsToButton(endButtonId, btnName, IDB_END_CALL_PRESS_ICON, BTN_PRESS);
+       SetBitmapsToButton(endButtonId, btnName, IDB_END_CALL_DIM_ICON, BTN_DIM);
+
+       //Add or Join call based on form state
+       String addJoinButtonId(IDC_ADDJOINCALL_BUTTON);
+       switch (__parentFormType)
+       {
+       case FORMTYPE_OUTGOINGCALL:
+       case FORMTYPE_ACTIVECALL:
+       case FORMTYPE_EMERGENCYOUTGOINGCALL:
+       case FORMTYPE_EMERGENCYACTIVECALL:
+       {
+               //End call listener
+               AddKeyPadActionListener(endButtonId, IDA_END_CALL);
+               //Add Call
+               btnName = AppUtility::GetResourceString(IDS_ADDCALL_BTN_NAME);
+               SetBitmapsToButton(addJoinButtonId, btnName, IDB_ADD_CALL_ICON, BTN_NORMAL);
+               SetBitmapsToButton(addJoinButtonId, btnName, IDB_ADD_CALL_PRESS_ICON, BTN_PRESS);
+               SetBitmapsToButton(addJoinButtonId, btnName, IDB_ADD_CALL_DIM_ICON, BTN_DIM);
+               AddKeyPadActionListener(addJoinButtonId, IDA_ADD_CALL);
+       }
+       break;
+
+       case FORMTYPE_ACTIVECONFCALL:
+       {
+               //End call listener
+               AddKeyPadActionListener(endButtonId, IDA_END_CONF_CALL);
+               //Add Call
+               btnName = AppUtility::GetResourceString(IDS_ADDCALL_BTN_NAME);
+               SetBitmapsToButton(addJoinButtonId, btnName, IDB_ADD_CALL_ICON, BTN_NORMAL);
+               SetBitmapsToButton(addJoinButtonId, btnName, IDB_ADD_CALL_PRESS_ICON, BTN_PRESS);
+               SetBitmapsToButton(addJoinButtonId, btnName, IDB_ADD_CALL_DIM_ICON, BTN_DIM);
+               AddKeyPadActionListener(addJoinButtonId, IDA_ADD_CALL);
+       }
+       break;
+
+       case FORMTYPE_MULTIPLECALLS:
+       {
+               //End call listener
+               AddKeyPadActionListener(endButtonId, IDA_END_CALL);
+               //Join Call
+               btnName = AppUtility::GetResourceString(IDS_JOINCALL_BTN_NAME);
+               SetBitmapsToButton(addJoinButtonId, btnName, IDB_JOIN_CALL_ICON, BTN_NORMAL);
+               SetBitmapsToButton(addJoinButtonId, btnName, IDB_JOIN_CALL_PRESS_ICON, BTN_PRESS);
+               SetBitmapsToButton(addJoinButtonId, btnName, IDB_JOIN_CALL_DIM_ICON, BTN_DIM);
+               AddKeyPadActionListener(addJoinButtonId, IDA_JOIN_CALL);
+       }
+       break;
+
+       default:
+               break;
+       }
+
+       //Keypad is closed, by default
+       SetKeypadButtonState(IDA_OPEN_NUMKEYPAD);
+       //Speaker is off, by default
+       SetSpeakerButtonState(IDA_SPEAKER);
+       //Mute is off, by default
+       SetMuteButtonState(IDA_MUTE);
+       //Contact
+       String contactButtonId(IDC_CONTACT_BUTTON);
+       btnName = AppUtility::GetResourceString(IDS_CONTACT_BTN_NAME);
+       SetBitmapsToButton(contactButtonId, btnName, IDB_CONTACT_ICON, BTN_NORMAL);
+       SetBitmapsToButton(contactButtonId, btnName, IDB_CONTACT_PRESS_ICON, BTN_PRESS);
+       SetBitmapsToButton(contactButtonId, btnName, IDB_CONTACT_DIM_ICON, BTN_DIM);
+       AddKeyPadActionListener(contactButtonId, IDA_OPEN_CONTACTS);
+
+       //disable all keys except 'Speaker' keys while dialing outgoing call
+       if (__parentFormType == FORMTYPE_OUTGOINGCALL || __parentFormType == FORMTYPE_EMERGENCYOUTGOINGCALL
+                       || __parentFormType == FORMTYPE_EMERGENCYACTIVECALL)
+       {
+               DisableKeysForOutgoingCall();
+       }
+
+       return r;
+}
+
+void
+CallButtonsPanel::SetBitmapsToButton(const String& buttonId, const String& buttonName, const String& imgPath, ButtonState state)
+{
+       Button* pButton = static_cast<Button*>(GetControl(buttonId));
+       if (pButton != null)
+       {
+               //Fetch Bitmap from resource
+               Bitmap* pBitmap = AppUtility::GetBitmapFromResourcesN(imgPath,
+                               W_BG_BITMAP, H_BG_BITMAP);
+
+               //Create a new canvas
+               Canvas* pCanvas = new (std::nothrow) Canvas;
+               pCanvas->Construct(Rectangle(0, 0, W_KEYPAD_BTN, H_KEYPAD_BTN));
+
+               //Set Text to Canvas
+               Point bitmapPos(0, 0);
+               bitmapPos.SetPosition(((pCanvas->GetBounds().width - pBitmap->GetWidth()) / 2), Y_BG_BITMAP_POS);
+               SetEnrichedTextToButton(buttonName, pCanvas, state, (bitmapPos.y + pBitmap->GetHeight() + IDI_VERTICAL_SPACE));
+
+               //set normal bitmap to canvas
+               pCanvas->DrawBitmap(Rectangle(bitmapPos, Dimension(pBitmap->GetWidth(), pBitmap->GetHeight())), *pBitmap);
+
+               //Set the final Bitmap to Button
+               Bitmap* pActualBgBmp = new (std::nothrow) Bitmap();
+               pActualBgBmp->Construct(*pCanvas, pCanvas->GetBounds());
+               //scale to button size
+               pActualBgBmp->SetScalingQuality(BITMAP_SCALING_QUALITY_MID);
+               pActualBgBmp->Scale(pButton->GetSize());
+
+               switch (state)
+               {
+               case BTN_NORMAL:
+               {
+                       pButton->SetNormalBackgroundBitmap(*pActualBgBmp);
+               }
+               break;
+
+               case BTN_PRESS:
+               {
+                       pButton->SetPressedBackgroundBitmap(*pActualBgBmp);
+               }
+               break;
+
+               case BTN_DIM:
+               {
+                       pButton->SetDisabledBitmap(Point(0, 0), *pActualBgBmp);
+               }
+               break;
+               }
+               pButton->Invalidate(true);
+
+               delete pBitmap;
+               delete pActualBgBmp;
+               delete pCanvas;
+       }
+}
+
+void
+CallButtonsPanel::SetViewContacBitmapToButton(const String& buttonId, const String& buttonName, const String& imgBackgroundPath,const String& imgPath, ButtonState state)
+{
+       Button* pButton = static_cast<Button*>(GetControl(buttonId));
+       if (pButton != null)
+       {
+
+               //Fetch Bitmap from resource
+               Bitmap* pBitmap = AppUtility::GetBitmapFromResourcesN(imgPath,
+                               W_VIEW_CONTACT_BITMAP, W_VIEW_CONTACT_BITMAP);
+
+               //Create a new canvas
+               Canvas* pCanvas = new (std::nothrow) Canvas;
+               pCanvas->Construct(Rectangle(0, 0, pButton->GetBounds().width, pButton->GetBounds().height));
+
+               // Draw background bitmap
+               AppResource* pAppResource = AppResource::GetInstance();
+               Bitmap* pBackGroundBitmap = pAppResource->GetBitmapN(imgBackgroundPath);
+               if (pBackGroundBitmap->IsNinePatchedBitmap())
+               {
+                       pCanvas->DrawNinePatchedBitmap(pCanvas->GetBounds(), *pBackGroundBitmap);
+               }
+               else
+               {
+                       pCanvas->DrawBitmap(pCanvas->GetBounds(), *pBackGroundBitmap);
+               }
+               delete pBackGroundBitmap;
+               //Set Text to Canvas
+               Point bitmapPos(0, 0);
+               bitmapPos.SetPosition(((pCanvas->GetBounds().width - pBitmap->GetWidth()) / 2), Y_VIEW_CONTACT_BITMAP_POS);
+               SetEnrichedTextToButton(buttonName, pCanvas, state, (bitmapPos.y + pBitmap->GetHeight() + IDI_VERTICAL_SPACE));
+
+
+               //set normal bitmap to canvas
+               pCanvas->DrawBitmap(Rectangle(bitmapPos, Dimension(pBitmap->GetWidth(), pBitmap->GetHeight())), *pBitmap);
+
+               //Set the final Bitmap to Button
+               Bitmap* pActualBgBmp = new (std::nothrow) Bitmap();
+               pActualBgBmp->Construct(*pCanvas, pCanvas->GetBounds());
+
+               switch (state)
+               {
+                       case BTN_NORMAL:
+                       {
+                               pButton->SetNormalBackgroundBitmap(*pActualBgBmp);
+                       }
+                       break;
+
+                       case BTN_PRESS:
+                       {
+                               pButton->SetPressedBackgroundBitmap(*pActualBgBmp);
+                       }
+                       break;
+
+               }
+               pButton->Invalidate(true);
+
+               delete pBitmap;
+               delete pActualBgBmp;
+               delete pCanvas;
+       }
+}
+
+void
+CallButtonsPanel::SetEnrichedTextToButton(const String& buttonName, Canvas* pCanvas, ButtonState state, int verticalPos)
+{
+       //find text color
+       Color textColor(255, 255, 255);
+       switch (state)
+       {
+       case BTN_NORMAL:
+               textColor.SetAlpha(255);
+               break;
+
+       case BTN_PRESS:
+               textColor.SetAlpha(127);
+               break;
+
+       case BTN_DIM:
+               textColor.SetAlpha(77);
+               break;
+       }
+
+       Font font;
+       font.Construct(FONT_STYLE_PLAIN, IDI_TEXT_SIZE);
+       Dimension textDimension;
+       font.GetTextExtent(buttonName, buttonName.GetLength(), textDimension);
+       textDimension.height = textDimension.height + font.GetDescender();
+       TextElement* pTextElement = new (std::nothrow) TextElement();
+       pTextElement->Construct(buttonName);
+       pTextElement->SetTextColor(textColor);
+       pTextElement->SetFont(font);
+
+       EnrichedText* pEnrichedText = new (std::nothrow) EnrichedText();
+       pEnrichedText->Construct(textDimension);
+       pEnrichedText->Add(*pTextElement);
+
+       //Draw text
+       Point textPos(((pCanvas->GetBounds().width - pEnrichedText->GetWidth()) / 2), verticalPos);
+       pCanvas->DrawText(textPos, *pEnrichedText);
+
+       // Cleans up
+       pEnrichedText->RemoveAll(true);
+       delete pEnrichedText;
+}
+
+void
+CallButtonsPanel::AddKeyPadActionListener(const String& buttonId, CommandIds cmdId)
+{
+       Button* pButton = static_cast<Button*>(GetControl(buttonId));
+       if (pButton != null)
+       {
+               pButton->SetActionId(cmdId);
+               pButton->AddActionEventListener(*__pActionListener);
+       }
+}
+
+void
+CallButtonsPanel::DisableKeysForOutgoingCall(void)
+{
+       //add call
+       EnableAddCallButton(false);
+
+       //keypad
+       Button* pButton = static_cast<Button*>(GetControl(IDC_KEYPAD_BUTTON));
+       pButton->SetEnabled(false);
+
+       //mute
+       pButton = static_cast<Button*>(GetControl(IDC_MUTE_BUTTON));
+       pButton->SetEnabled(false);
+
+       //contact
+       pButton = static_cast<Button*>(GetControl(IDC_CONTACT_BUTTON));
+       pButton->SetEnabled(false);
+}
+
+void
+CallButtonsPanel::SetEndCallPanelState(bool isEnabled)
+{
+       //Voice Call
+       Button* pButton = static_cast<Button*>(GetControl(IDC_VOICECALL_BUTTON));
+       pButton->SetEnabled(isEnabled);
+
+       //Video Call
+       pButton = static_cast<Button*>(GetControl(IDC_VIDEOCALL_BUTTON));
+       pButton->SetEnabled(isEnabled);
+
+       //Message
+       pButton = static_cast<Button*>(GetControl(IDC_MSG_BUTTON));
+       pButton->SetEnabled(isEnabled);
+}
+
+void
+CallButtonsPanel::EnableAddCallButton(bool enable)
+{
+       //add call
+       Button* pButton = static_cast<Button*>(GetControl(IDC_ADDJOINCALL_BUTTON));
+       if(pButton != null && pButton->GetActionId() == IDA_ADD_CALL)
+       {
+               pButton->SetEnabled(enable);
+               pButton->Invalidate(true);
+       }
+}
+
+void
+CallButtonsPanel::EnableJoinCallButton(bool enable)
+{
+       //join call
+       Button* pButton = static_cast<Button*>(GetControl(IDC_ADDJOINCALL_BUTTON));
+       if(pButton != null && pButton->GetActionId() == IDA_JOIN_CALL)
+       {
+               pButton->SetEnabled(enable);
+               pButton->Invalidate(true);
+       }
+}
+
+void
+CallButtonsPanel::SetButtonPosition(void)
+{
+       switch (__parentFormType)
+               {
+               case FORMTYPE_ENDCALL:
+               {
+                       //Voice Call
+                       Button* pButton = static_cast<Button*>(GetControl(IDC_VOICECALL_BUTTON));
+                       SetControlAlwaysOnTop(*pButton,true);
+
+                       //Video Call
+                       pButton = static_cast<Button*>(GetControl(IDC_VIDEOCALL_BUTTON));
+                       SetControlAlwaysOnTop(*pButton,true);
+
+                       //Message
+                       pButton = static_cast<Button*>(GetControl(IDC_MSG_BUTTON));
+                       SetControlAlwaysOnTop(*pButton,true);
+               }
+                       break;
+
+               default:
+               {
+                       //keypad
+                       Button* pButton = static_cast<Button*>(GetControl(IDC_KEYPAD_BUTTON));
+                       SetControlAlwaysOnTop(*pButton,true);
+                       //mute
+                       pButton = static_cast<Button*>(GetControl(IDC_MUTE_BUTTON));
+                       SetControlAlwaysOnTop(*pButton,true);
+                       //contact
+                       pButton = static_cast<Button*>(GetControl(IDC_CONTACT_BUTTON));
+                       SetControlAlwaysOnTop(*pButton,true);
+                       //Add or Join call based on form state
+                       pButton = static_cast<Button*>(GetControl(IDC_ADDJOINCALL_BUTTON));
+                       SetControlAlwaysOnTop(*pButton,true);
+                       //End call
+                       pButton = static_cast<Button*>(GetControl(IDC_ENDCALL_BUTTON));
+                       SetControlAlwaysOnTop(*pButton,true);
+                       //Speaker
+                       pButton = static_cast<Button*>(GetControl(IDC_SPEAKER_BUTTON));
+                       SetControlAlwaysOnTop(*pButton,true);
+               }
+                       break;
+               }
+}
diff --git a/src/CallCommonUtils.cpp b/src/CallCommonUtils.cpp
new file mode 100644 (file)
index 0000000..bac96d9
--- /dev/null
@@ -0,0 +1,647 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ *  @file   CallCommonUtils.cpp
+ *  @brief  commonly used functions
+ */
+
+#include <FApp.h>
+#include <FMedia.h>
+#include <FGraphics.h>
+#include "CallAppUtility.h"
+#include "CallCommonUtils.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Graphics;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Base::Collection;
+
+const int ID_NAME_STRING = 100;
+const int ID_NUMBER_STRING = 101;
+const int ID_TIME_STRING = 102;
+const int ID_CONTACT_BITMAP = 103;
+const int ID_CALLTYPE_BITMAP = 104;
+
+
+const int X_TEXT_LINE1_ITEM = 16;
+const int Y_TEXT_LINE1_ITEM = 10;
+const int H_TEXT_LINE1_ITEM = 60;
+const int W_TEXT_LINE1_ITEM = 560;
+
+const int X_TEXT_LINE2_ITEM = 64;
+const int Y_TEXT_LINE2_ITEM = 70;
+const int H_TEXT_LINE2_ITEM = 48;
+const int W_TEXT_LINE2_ITEM = 256;
+
+const int X_TEXT_TIME_ITEM = 320;
+const int Y_TEXT_TIME_ITEM = 70;
+const int H_TEXT_TIME_ITEM = 48;
+const int W_TEXT_TIME_ITEM = 256;
+
+const int X_CONTACT_BITMAP_ITEM = 592;
+const int Y_CONTACT_BITMAP_ITEM = 0;
+const int H_CONTACT_BITMAP_ITEM = 128;
+const int W_CONTACT_BITMAP_ITEM = 128;
+
+const int X_CALLTYPE_BITMAP_ITEM = 16;
+const int Y_CALLTYPE_BITMAP_ITEM = 70 + 8;
+const int H_CALLTYPE_BITMAP_ITEM = 32;
+const int W_CALLTYPE_BITMAP_ITEM = 32;
+
+const int X_DIALER_BTN_TXT = 13;
+const int W_DIALER_BTN_NUM_TXT = 77;
+const int W_DIALER_BTN_ALPHA_TXT = 121;
+
+const int W_ENRICHED_TEXT = 190;
+const int X_ENRICHED_TEXT = 143;
+
+Font*
+DialUtil::GetTextFontN(int textFontStyle)
+{
+       Font* font = new (std::nothrow) Font();
+
+       switch (textFontStyle)
+       {
+       case FONT_CALLING_TEXT:
+       {
+               font->Construct(FONT_STYLE_PLAIN, 94);
+       }
+       break;
+
+       case FONT_KEYPAD_NUMBER:
+       {
+               font->Construct(FONT_STYLE_PLAIN, 116);
+       }
+       break;
+
+       case FONT_KEYPAD_TEXT:
+       {
+               font->Construct(FONT_STYLE_BOLD, 40);
+       }
+       break;
+
+       case FONT_KEYPAD_P:
+       {
+               font->Construct(FONT_STYLE_BOLD, 56);
+       }
+       break;
+
+       case FONT_KEYPAD_PLUS:
+       {
+               font->Construct(FONT_STYLE_BOLD, 64);
+       }
+       break;
+
+       case FONT_KEYPAD_CANCEL:
+       {
+               font->Construct(FONT_STYLE_PLAIN, 34);
+       }
+       break;
+
+       case FONT_SUGGESTION_NAME:
+       {
+               font->Construct(FONT_STYLE_PLAIN, 40);
+       }
+       break;
+
+       case FONT_SUGGESTION_MOBILE:
+       {
+               font->Construct(FONT_STYLE_PLAIN, 35);
+       }
+       break;
+
+       case FONT_SUGGESTION_NUMBER:
+       {
+               font->Construct(FONT_STYLE_PLAIN, 35);
+       }
+       break;
+
+       case FONT_SUGGESTION_LIST_NUMBER:
+       {
+               font->Construct(FONT_STYLE_PLAIN, 40);
+       }
+       break;
+       }
+       return font;
+}
+
+Color*
+DialUtil::GetTextColorN(int textColor, int buttonStatus)
+{
+       Color* color = new (std::nothrow) Color();
+
+       if (buttonStatus == BUTTON_STATUS_PRESSED)
+       {
+               color->SetColorComponents(249, 249, 249);
+               return color;
+       }
+
+       switch (textColor)
+       {
+       case FONT_CALLING_TEXT:
+       {
+               color->SetColorComponents(0, 0, 0);
+       }
+       break;
+
+       case FONT_KEYPAD_NUMBER:
+       {
+               color->SetColorComponents(255, 255, 255);
+       }
+       break;
+
+       case FONT_KEYPAD_TEXT:
+       case FONT_KEYPAD_P:
+       case FONT_KEYPAD_PLUS:
+       {
+               color->SetColorComponents(148, 177, 200);
+       }
+       break;
+
+       case FONT_KEYPAD_CANCEL:
+       {
+               color->SetColorComponents(255, 255, 255);
+       }
+       break;
+
+       case FONT_SUGGESTION_NAME:
+       {
+               color->SetColorComponents(255, 255, 255);
+       }
+       break;
+
+       case FONT_SUGGESTION_MOBILE:
+       {
+               color->SetColorComponents(148, 177, 200);
+       }
+       break;
+
+       case FONT_HIGHLIGHT_SEARCH_KEYWORD:
+       case FONT_SUGGESTION_NUMBER:
+       {
+               color->SetColorComponents(26, 214, 227);
+       }
+       break;
+
+       case FONT_SUGGESTION_LIST_NUMBER:
+       {
+               color->SetColorComponents(124, 189, 224);
+       }
+       break;
+       }
+       return color;
+}
+
+bool
+DialUtil::IsNumericString(Tizen::Base::String& keyWord)
+{
+       bool isDigit = false;
+       String digitStr(L"");
+       if(keyWord.SubString(0,1,digitStr) == E_SUCCESS)
+       {
+               int digit;
+               if(Integer::Parse(digitStr,digit) == E_SUCCESS)
+               {
+                       isDigit = true;
+               }
+       }
+       return isDigit;
+}
+
+void
+DialUtil::Draw9PatchToCanvas(Canvas& pCanvas, const String& bgImg)
+{
+       AppResource* pAppResource = AppResource::GetInstance();
+       Bitmap* pBitmap = pAppResource->GetBitmapN(bgImg);
+
+       if (pBitmap->IsNinePatchedBitmap())
+       {
+               pCanvas.DrawNinePatchedBitmap(pCanvas.GetBounds(), *pBitmap);
+       }
+       delete pBitmap;
+
+       return;
+}
+
+void
+DialUtil::DrawImageToCanvas(const String& image, Dimension imageDimention, Canvas& pCanvas, int pos)
+{
+       //create and scale bitmap
+       Bitmap* pBitmap = AppUtility::GetBitmapFromResourcesN(image, imageDimention.width, imageDimention.height);
+
+       //Find position to draw bitmap
+       Point bitmapPos(0, 0);
+       switch (pos)
+       {
+       case POSITION_LEFT:
+       {
+               bitmapPos.SetPosition(X_DIALER_BTN_TXT + (W_DIALER_BTN_NUM_TXT - pBitmap->GetWidth()) / 2, (pCanvas.GetBounds().height - pBitmap->GetHeight()) / 2);
+       }
+       break;
+
+       case POSITION_RIGHT:
+       {
+               bitmapPos.SetPosition(X_DIALER_BTN_TXT + W_DIALER_BTN_NUM_TXT + ((W_DIALER_BTN_ALPHA_TXT - pBitmap->GetWidth()) / 2), (pCanvas.GetBounds().height - pBitmap->GetHeight()) / 2);
+       }
+       break;
+
+       case POSITION_CENTER:
+       {
+               bitmapPos.SetPosition((pCanvas.GetBounds().width - pBitmap->GetWidth()) / 2, (pCanvas.GetBounds().height - pBitmap->GetHeight()) / 2);
+       }
+       break;
+
+       case POSITION_BOTTOM_CENTER:
+       {
+               bitmapPos.SetPosition((pCanvas.GetBounds().width - pBitmap->GetWidth()) / 2, pCanvas.GetBounds().height / 2 + (pCanvas.GetBounds().height / 2 - pBitmap->GetHeight()) / 2);
+       }
+       break;
+       }
+
+       //draw bitmap
+       pCanvas.DrawBitmap(Rectangle(bitmapPos, Dimension(pBitmap->GetWidth(), pBitmap->GetHeight())), *pBitmap);
+       delete pBitmap;
+       pBitmap = null;
+
+       return;
+}
+
+void
+DialUtil::DrawTextToCanvas(const String& buttonText, int textFontStyle, Canvas& pCanvas, int pos, int buttonStatus)
+{
+       AppLogDebug("ENTER");
+       if (buttonText == null)
+       {
+               return;
+       }
+
+       //get text font
+       Font* font = GetTextFontN(textFontStyle);
+
+       //get text color
+       Color* textColor = GetTextColorN(textFontStyle, buttonStatus);
+
+       //create text element
+       TextElement* pTextElement = new (std::nothrow) TextElement();
+       pTextElement->Construct(buttonText);
+       pTextElement->SetTextColor(*textColor);
+       pTextElement->SetFont(*font);
+       delete textColor;
+
+       //get dimensions of the text
+       Dimension textDimension;
+       font->GetTextExtent(buttonText, buttonText.GetLength(), textDimension);
+       if(textFontStyle != FONT_KEYPAD_NUMBER)
+       {
+               textDimension.height += font->GetDescender();
+       }
+
+       //create enriched text
+       EnrichedText* pEnrichedText = new (std::nothrow) EnrichedText();
+       pEnrichedText->Construct(textDimension);
+       pEnrichedText->Add(*pTextElement);
+
+       //set the position of the text in canvas
+       Point textPos(0, 0);
+       switch (pos)
+       {
+       case POSITION_LEFT:
+       {
+               //Margin 13, rectangle for left text (13,0,77, height of canvas), center aligned
+               textPos.SetPosition(X_DIALER_BTN_TXT + ((W_DIALER_BTN_NUM_TXT - pEnrichedText->GetWidth()) / 2), (pCanvas.GetBounds().height - pEnrichedText->GetHeight()) / 2);
+       }
+       break;
+
+       case POSITION_RIGHT:
+       {
+               //rectangle for right text (13+77,0, 121, height of canvas), center aligned
+               textPos.SetPosition(X_DIALER_BTN_TXT + W_DIALER_BTN_NUM_TXT + ((121 - pEnrichedText->GetWidth()) / 2), (pCanvas.GetBounds().height - pEnrichedText->GetHeight()) / 2);
+       }
+       break;
+
+       case POSITION_CENTER:
+       {
+               //rectangle for image : entire canvas, center aligned
+               textPos.SetPosition((pCanvas.GetBounds().width - pEnrichedText->GetWidth()) / 2, (pCanvas.GetBounds().height - pEnrichedText->GetHeight()) / 2);
+       }
+       break;
+
+       case POSITION_TOP_LEFT:
+       {
+               textPos.SetPosition(10, (pCanvas.GetBounds().height / 2 - pEnrichedText->GetHeight()) / 2);
+       }
+       break;
+
+       case POSITION_TOP_CENTER:
+       {
+               textPos.SetPosition((pCanvas.GetBounds().width - pEnrichedText->GetWidth()) / 2, (pCanvas.GetBounds().height / 2 - pEnrichedText->GetHeight()) / 2);
+       }
+       break;
+
+       case POSITION_BOTTOM_LEFT:
+       {
+               textPos.SetPosition(10, pCanvas.GetBounds().height / 2 + ((pCanvas.GetBounds().height / 2 - pEnrichedText->GetHeight()) / 2));
+       }
+       break;
+
+       case POSITION_BOTTOM_CENTER:
+       {
+               int width = pEnrichedText->GetWidth();
+               if(width > W_ENRICHED_TEXT)
+               {
+                       textPos.SetPosition(X_ENRICHED_TEXT, pCanvas.GetBounds().height / 2 + ((pCanvas.GetBounds().height / 2 - pEnrichedText->GetHeight()) / 2));
+               }
+               else
+               {
+                       textPos.SetPosition(10 + ((pCanvas.GetBounds().width - pEnrichedText->GetWidth()) / 2), pCanvas.GetBounds().height / 2 + ((pCanvas.GetBounds().height / 2 - pEnrichedText->GetHeight()) / 2));
+               }
+
+       }
+       break;
+       }
+
+       //Draw EnrichedText to canvas
+       pCanvas.DrawText(textPos, *pEnrichedText);
+
+       // Cleans up
+       pEnrichedText->RemoveAll(true);
+       delete pEnrichedText;
+       delete font;
+
+       AppLogDebug("EXIT");
+       return;
+}
+
+void
+DialUtil::DrawCanvasToButton(Canvas* pCanvasNormal, Canvas* pCanvasPressed, Button* pButton)
+{
+       Bitmap* pNormalBgBmp = new (std::nothrow) Bitmap();
+       pNormalBgBmp->Construct(*pCanvasNormal, pCanvasNormal->GetBounds());
+       //scale bitmap to button size
+       pNormalBgBmp->SetScalingQuality(BITMAP_SCALING_QUALITY_MID);
+       pNormalBgBmp->Scale(pButton->GetSize());
+
+       pButton->SetNormalBackgroundBitmap(*pNormalBgBmp);
+
+       if (pCanvasPressed != null)
+       {
+               Bitmap* pPressedBgBmp = new (std::nothrow) Bitmap();
+               pPressedBgBmp->Construct(*pCanvasPressed, pCanvasPressed->GetBounds());
+               //scale bitmap to button size
+               pPressedBgBmp->SetScalingQuality(BITMAP_SCALING_QUALITY_MID);
+               pPressedBgBmp->Scale(pButton->GetSize());
+               pButton->SetPressedBackgroundBitmap(*pPressedBgBmp);
+               delete pPressedBgBmp;
+               pPressedBgBmp = null;
+       }
+       else
+       {
+               pButton->SetPressedBackgroundBitmap(*pNormalBgBmp);
+       }
+
+       pButton->SetDisabledBitmap(Point(0, 0), *pNormalBgBmp);
+       pButton->Invalidate(true);
+       delete pNormalBgBmp;
+       pNormalBgBmp = null;
+
+       return;
+}
+
+String
+DialUtil::ConvertDialedNumberToString(int dialNumber)
+{
+       switch (dialNumber)
+       {
+       case NUM_KEY1:
+       {
+               return L"1";
+       }
+       case NUM_KEY2:
+       {
+               return L"2";
+       }
+       case NUM_KEY3:
+       {
+               return L"3";
+       }
+       case NUM_KEY4:
+       {
+               return L"4";
+       }
+       case NUM_KEY5:
+       {
+               return L"5";
+       }
+       case NUM_KEY6:
+       {
+               return L"6";
+       }
+       case NUM_KEY7:
+       {
+               return L"7";
+       }
+       case NUM_KEY8:
+       {
+               return L"8";
+       }
+       case NUM_KEY9:
+       {
+               return L"9";
+       }
+       break;
+       case NUM_KEY0:
+       {
+               return L"0";
+       }
+       break;
+       }
+       return null;
+}
+
+IList*
+DialUtil::FetchPossibleNamesListN(const String& prevSearchStr, int nextDigit)
+{
+       //Fetch matching names for mapping char for digit, e.g. 2->ABC, 3->DEF.
+       ArrayList* pNamesList = new (std::nothrow) ArrayList(SingleObjectDeleter);
+       pNamesList->Construct(8);
+
+       if(nextDigit >=2 && nextDigit <= 9)
+       {
+               switch(nextDigit)
+               {
+               case 2:
+               {
+                       pNamesList->Add((new String(prevSearchStr+L"a")));
+                       pNamesList->Add((new String(prevSearchStr+L"b")));
+                       pNamesList->Add((new String(prevSearchStr+L"c")));
+                       pNamesList->Add((new String(prevSearchStr+L"A")));
+                       pNamesList->Add((new String(prevSearchStr+L"B")));
+                       pNamesList->Add((new String(prevSearchStr+L"C")));
+               }
+               break;
+
+               case 3:
+               {
+                       pNamesList->Add((new String(prevSearchStr+L"d")));
+                       pNamesList->Add((new String(prevSearchStr+L"e")));
+                       pNamesList->Add((new String(prevSearchStr+L"f")));
+                       pNamesList->Add((new String(prevSearchStr+L"D")));
+                       pNamesList->Add((new String(prevSearchStr+L"E")));
+                       pNamesList->Add((new String(prevSearchStr+L"F")));
+               }
+               break;
+
+               case 4:
+               {
+                       pNamesList->Add((new String(prevSearchStr+L"g")));
+                       pNamesList->Add((new String(prevSearchStr+L"h")));
+                       pNamesList->Add((new String(prevSearchStr+L"i")));
+                       pNamesList->Add((new String(prevSearchStr+L"G")));
+                       pNamesList->Add((new String(prevSearchStr+L"H")));
+                       pNamesList->Add((new String(prevSearchStr+L"I")));
+               }
+               break;
+
+               case 5:
+               {
+                       pNamesList->Add((new String(prevSearchStr+L"j")));
+                       pNamesList->Add((new String(prevSearchStr+L"k")));
+                       pNamesList->Add((new String(prevSearchStr+L"l")));
+                       pNamesList->Add((new String(prevSearchStr+L"J")));
+                       pNamesList->Add((new String(prevSearchStr+L"K")));
+                       pNamesList->Add((new String(prevSearchStr+L"L")));
+               }
+               break;
+
+               case 6:
+               {
+                       pNamesList->Add((new String(prevSearchStr+L"m")));
+                       pNamesList->Add((new String(prevSearchStr+L"n")));
+                       pNamesList->Add((new String(prevSearchStr+L"o")));
+                       pNamesList->Add((new String(prevSearchStr+L"M")));
+                       pNamesList->Add((new String(prevSearchStr+L"N")));
+                       pNamesList->Add((new String(prevSearchStr+L"O")));
+               }
+               break;
+
+               case 7:
+               {
+                       pNamesList->Add((new String(prevSearchStr+L"p")));
+                       pNamesList->Add((new String(prevSearchStr+L"q")));
+                       pNamesList->Add((new String(prevSearchStr+L"r")));
+                       pNamesList->Add((new String(prevSearchStr+L"s")));
+                       pNamesList->Add((new String(prevSearchStr+L"P")));
+                       pNamesList->Add((new String(prevSearchStr+L"Q")));
+                       pNamesList->Add((new String(prevSearchStr+L"R")));
+                       pNamesList->Add((new String(prevSearchStr+L"S")));
+               }
+               break;
+
+               case 8:
+               {
+                       pNamesList->Add((new String(prevSearchStr+L"t")));
+                       pNamesList->Add((new String(prevSearchStr+L"u")));
+                       pNamesList->Add((new String(prevSearchStr+L"v")));
+                       pNamesList->Add((new String(prevSearchStr+L"T")));
+                       pNamesList->Add((new String(prevSearchStr+L"U")));
+                       pNamesList->Add((new String(prevSearchStr+L"V")));
+               }
+               break;
+
+               case 9:
+               {
+                       pNamesList->Add((new String(prevSearchStr+L"w")));
+                       pNamesList->Add((new String(prevSearchStr+L"x")));
+                       pNamesList->Add((new String(prevSearchStr+L"y")));
+                       pNamesList->Add((new String(prevSearchStr+L"z")));
+                       pNamesList->Add((new String(prevSearchStr+L"W")));
+                       pNamesList->Add((new String(prevSearchStr+L"X")));
+                       pNamesList->Add((new String(prevSearchStr+L"Y")));
+                       pNamesList->Add((new String(prevSearchStr+L"Z")));
+               }
+               break;
+
+               }
+       }
+       return pNamesList;
+}
+
+void
+DialUtil::ConvertNameToNumericKeys(String& subContactName, String& possibleKeysTyped)
+{
+       for(int charPos=0;charPos < subContactName.GetLength();charPos++)
+       {
+               wchar_t nextChar;
+               subContactName.GetCharAt(charPos,nextChar);
+               switch(nextChar)
+               {
+               case 'a':case 'A':
+               case 'b':case 'B':
+               case 'c':case 'C':
+                       possibleKeysTyped.Append(2);
+                       break;
+
+               case 'd':case 'D':
+               case 'e':case 'E':
+               case 'f':case 'F':
+                       possibleKeysTyped.Append(3);
+                       break;
+
+               case 'g':case 'G':
+               case 'h':case 'H':
+               case 'i':case 'I':
+                       possibleKeysTyped.Append(4);
+                       break;
+
+               case 'j':case 'J':
+               case 'k':case 'K':
+               case 'l':case 'L':
+                       possibleKeysTyped.Append(5);
+                       break;
+
+               case 'm':case 'M':
+               case 'n':case 'N':
+               case 'o':case 'O':
+                       possibleKeysTyped.Append(6);
+                       break;
+
+               case 'p':case 'P':
+               case 'q':case 'Q':
+               case 'r':case 'R':
+               case 's':case 'S':
+                       possibleKeysTyped.Append(7);
+                       break;
+
+               case 't':case 'T':
+               case 'u':case 'U':
+               case 'v':case 'V':
+                       possibleKeysTyped.Append(8);
+                       break;
+
+               case 'w':case 'W':
+               case 'x':case 'X':
+               case 'y':case 'Y':
+               case 'z':case 'Z':
+                       possibleKeysTyped.Append(9);
+                       break;
+
+               default:
+                       break;
+               }
+       }
+}
diff --git a/src/CallConfCallerListForm.cpp b/src/CallConfCallerListForm.cpp
new file mode 100644 (file)
index 0000000..9b82799
--- /dev/null
@@ -0,0 +1,982 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file    CallConfCallerListForm.cpp
+ * @brief      Conference caller list form
+ */
+#include <FSystem.h>
+#include "CallConfCallerListForm.h"
+#include "CallAppUtility.h"
+#include "CallPresentationModel.h"
+#include "CallSceneRegister.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Base::Runtime;
+using namespace Tizen::Base::Utility;
+using namespace Tizen::Graphics;
+using namespace Tizen::System;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+
+//Constants
+const int W_HOLD_BITMAP = 78;
+const int H_HOLD_BITMAP = 78;
+const int W_BACK_BITMAP = 56;
+const int H_BACK_BITMAP = 56;
+const int X_BACK_BITMAP = 8;
+const int Y_BACK_BITMAP = 8;
+const int W_SPLIT_BITMAP = 74;
+const int H_SPLIT_BITMAP = 74;
+const int W_END_BITMAP = 80;
+const int H_END_BITMAP = 74;
+const int IDI_MAX_SECONDS = 60;
+const int IDI_MAX_MINS = 60;
+const int LIST_ITEM_HEIGHT = 112;
+const int X_SPLIT_BUTTON_MARGIN = 26;
+const int Y_SPLIT_BUTTON_MARGIN = 19;
+const int X_END_BUTTON_PADDING = 26;
+const int X_CALLER_LABEL = 116;
+const int Y_CALLER_LABEL = 0;
+const int W_CALLER_LABEL = 488;
+const int H_CALLER_LABEL = 112;
+
+
+static const wchar_t* IDL_CONFCALL_LIST_FORM = L"IDL_CONFCALL_LIST_FORM";
+static const wchar_t* IDC_CALL_TIME_LABEL = L"IDC_CALL_TIME_LABEL";
+static const wchar_t* IDB_SPLIT_NORMAL_BUTTON_ICON = L"C01-1_conference_split.png";
+static const wchar_t* IDB_SPLIT_PRESS_BUTTON_ICON = L"C01-1_conference_split_press.png";
+static const wchar_t* IDB_END_NORMAL_BUTTON_ICON = L"C01-1_conference_end.png";
+static const wchar_t* IDB_END_PRESS_BUTTON_ICON = L"C01-1_conference_end_press.png";
+static const wchar_t* IDC_END_CONFCALL_BUTTON = L"IDC_END_CONFCALL_BUTTON";
+static const wchar_t* IDC_HOLD_CONFCALL_BUTTON = L"IDC_HOLD_CONFCALL_BUTTON";
+static const wchar_t* IDC_CALLER1_PANEL = L"IDC_CALLER1_PANEL";
+static const wchar_t* IDC__LINE_LABEL1 = L"IDC__LINE_LABEL1";
+static const wchar_t* IDC_CALLER2_PANEL = L"IDC_CALLER2_PANEL";
+static const wchar_t* IDC__LINE_LABEL2 = L"IDC__LINE_LABEL2";
+static const wchar_t* IDC_CALLER3_PANEL = L"IDC_CALLER3_PANEL";
+static const wchar_t* IDC__LINE_LABEL3 = L"IDC__LINE_LABEL3";
+static const wchar_t* IDC_CALLER4_PANEL = L"IDC_CALLER4_PANEL";
+static const wchar_t* IDC__LINE_LABEL4 = L"IDC__LINE_LABEL4";
+static const wchar_t* IDC_CALLER5_PANEL = L"IDC_CALLER5_PANEL";
+static const wchar_t* IDC__LINE_LABEL5 = L"IDC__LINE_LABEL5";
+static const wchar_t* IDC_END_CALLER1 = L"IDC_END_CALLER1";
+static const wchar_t* IDC_SPLIT_CALLER1 = L"IDC_SPLIT_CALLER1";
+static const wchar_t* IDC_CALLER1_LABEL = L"IDC_CALLER1_LABEL";
+static const wchar_t* IDC_END_CALLER2 = L"IDC_END_CALLER2";
+static const wchar_t* IDC_SPLIT_CALLER2 = L"IDC_SPLIT_CALLER2";
+static const wchar_t* IDC_CALLER2_LABEL = L"IDC_CALLER2_LABEL";
+static const wchar_t* IDC_END_CALLER3 = L"IDC_END_CALLER3";
+static const wchar_t* IDC_SPLIT_CALLER3 = L"IDC_SPLIT_CALLER3";
+static const wchar_t* IDC_CALLER3_LABEL = L"IDC_CALLER3_LABEL";
+static const wchar_t* IDC_END_CALLER4 = L"IDC_END_CALLER4";
+static const wchar_t* IDC_SPLIT_CALLER4 = L"IDC_SPLIT_CALLER4";
+static const wchar_t* IDC_CALLER4_LABEL = L"IDC_CALLER4_LABEL";
+static const wchar_t* IDC_END_CALLER5 = L"IDC_END_CALLER5";
+static const wchar_t* IDC_SPLIT_CALLER5 = L"IDC_SPLIT_CALLER5";
+static const wchar_t* IDC_CALLER5_LABEL = L"IDC_CALLER5_LABEL";
+static const wchar_t* IDC_CONF_CALL_LIST_TABLEVIEW = L"IDC_CONF_CALL_LIST_TABLEVIEW";
+
+//color
+const unsigned int COLOR_END_CALL_BG = Color32<180, 60, 60>::Value;
+const unsigned int COLOR_END_CALL_BG_PRESS = Color32<61, 153, 208>::Value;
+const unsigned int COLOR_SPLIT_CALL_BG = Color32<129, 140, 148>::Value;
+const unsigned int COLOR_SPLIT_CALL_BG_PRESS = Color32<63, 155, 210>::Value;
+ConfCallerListForm::ConfCallerListForm(void)
+: BaseForm(FORMTYPE_CONFCALLLIST)
+{
+       __pConfCallInfo = null;
+       __pConfCallTimer = null;
+}
+
+ConfCallerListForm::~ConfCallerListForm(void)
+{
+       if (__pConfCallTimer != null)
+       {
+               __pConfCallTimer->Cancel();
+               delete __pConfCallTimer;
+       }
+}
+
+void
+ConfCallerListForm::Initialize(void)
+{
+       Construct(IDL_CONFCALL_LIST_FORM);
+}
+
+result
+ConfCallerListForm::OnInitializing(void)
+{
+       result r = E_SUCCESS;
+       //Add action listener to buttons
+       AddActionListener(IDC_END_CONFCALL_BUTTON, IDA_END_CONF_CALL);
+       AddActionListener(IDC_HOLD_CONFCALL_BUTTON, IDA_HOLD_CONF_CALL);
+
+       Footer* pFooter = GetFooter();
+       if(pFooter != null)
+       {
+               SetFormBackEventListener(this);
+               pFooter->SetBackButton();
+       }
+
+       CreateTableView();
+       __pCallPresentor = CallPresentationModel::GetInstance();
+       return r;
+}
+
+void
+ConfCallerListForm::CreateTableView(void)
+{
+       __pList = static_cast <TableView*> (GetControl(IDC_CONF_CALL_LIST_TABLEVIEW));
+       __pList->SetItemProvider(this);
+       AddControl(*__pList);
+}
+
+void
+ConfCallerListForm::AddActionListener(const String& keyName, CommandIds cmdId)
+{
+       Button* pButtonKeypad = static_cast<Button*>(GetControl(keyName));
+       if (pButtonKeypad != null)
+       {
+               pButtonKeypad->SetActionId(cmdId);
+               pButtonKeypad->AddActionEventListener(*this);
+       }
+}
+
+result
+ConfCallerListForm::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+
+       if (__pCallPresentor != null)
+       {
+               __pCallPresentor = null;
+       }
+
+       if (__pConfCallInfo != null)
+       {
+               delete __pConfCallInfo;
+               __pConfCallInfo = null;
+       }
+
+       RemoveAllControls();
+       return r;
+}
+
+void
+ConfCallerListForm::OnActionPerformed(const Control& source, int actionId)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       AppAssert(pSceneManager);
+
+       switch (actionId)
+       {
+       case IDA_END_CONF_CALL:
+       {
+               bool success = __pCallPresentor->EndConferenceCall();
+               if (success == true)
+               {
+                       delete __pConfCallInfo;
+                       __pConfCallInfo = null;
+               }
+       }
+       break;
+
+       case IDA_HOLD_CONF_CALL:
+       {
+               // User has pressed end conference call and we are waiting for TAPI response
+               if(__pConfCallInfo == null)
+               {
+                       return;
+               }
+               bool success = true;
+               bool isCallOnHold = __pConfCallInfo->IsOnHold();
+               if (isCallOnHold == false)
+               {
+                       success = __pCallPresentor->HoldConferenceCall();
+               }
+               else
+               {
+                       success = __pCallPresentor->ActivateConferenceCall();
+               }
+
+               //Check if request to Hold / UnHold call is successful.
+               if(success == true)
+               {
+                       //If success, then invert the Hold status in conference call
+                       isCallOnHold = !(isCallOnHold);
+                       __pConfCallInfo->SetOnHold(isCallOnHold);
+                       //update panels and Hold button status
+                       ActivatePanels();
+                       SetHoldButtonStatus(isCallOnHold);
+               }
+       }
+       break;
+
+       case IDA_BACK_EVENT:
+       {
+               ArrayListT<CallInfo>* pCallList  = static_cast<ArrayListT<CallInfo>*>(__pCallPresentor->GetCallListN());
+               int noOfCalls = pCallList->GetCount();
+
+               //Ownership - To be deleted in 'OnSceneActivatedN' of next form
+               ArrayList* pCallInfoList = new (std::nothrow) ArrayList(SingleObjectDeleter);
+               pCallInfoList->Construct(noOfCalls);
+
+               for (int index = 0; index < noOfCalls; index++)
+               {
+                       //fetch call info and add to list
+                       CallInfo callInfo;
+                       result r = pCallList->GetAt(index, callInfo);
+                       if (r == E_SUCCESS)
+                       {
+                               //copy call information to new instance
+                               CallInfo* pCaller = new (std::nothrow) CallInfo();
+                               *pCaller = callInfo;
+                               pCallInfoList->Add(pCaller);
+                       }
+               }
+
+               if (noOfCalls == 1)
+               {
+                       //single active call - goto active call form
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_CONFCALL), pCallInfoList);
+               }
+               else
+               {
+                       //goto multiple active call form
+                       pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_MULTIPLEACTIVECALL), pCallInfoList);
+               }
+               pCallList->RemoveAll();
+               delete pCallList;
+       }
+       break;
+
+       case IDA_SPLIT_CALLER1:
+       case IDA_SPLIT_CALLER2:
+       case IDA_SPLIT_CALLER3:
+       case IDA_SPLIT_CALLER4:
+       case IDA_SPLIT_CALLER5:
+       {
+               // User has pressed end conference call and we are waiting for TAPI response
+               if(__pConfCallInfo == null)
+               {
+                       break;
+               }
+               __pCallPresentor->SplitFromConference(SplitConfCallerCmdIds(actionId),__pConfCallInfo->GetCallerList());
+       }
+       break;
+
+       case IDA_END_CALLER1:
+       case IDA_END_CALLER2:
+       case IDA_END_CALLER3:
+       case IDA_END_CALLER4:
+       case IDA_END_CALLER5:
+       {
+               // User has pressed end conference call and we are waiting for TAPI response
+               if(__pConfCallInfo == null)
+               {
+                       break;
+               }
+               __pCallPresentor->EndCallFromConference(EndConfCallerCmdIds(actionId),__pConfCallInfo->GetCallerList());
+       }
+       break;
+
+       default:
+               break;
+       }
+}
+
+void
+ConfCallerListForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& currentSceneId, IList* pArgs)
+{
+       //set itself as listener
+       __pCallPresentor->SetTelEventListener(this);
+
+       AddOrientationEventListener(*this);
+
+       //DisableAllControls();
+       if (__pConfCallInfo != null)
+       {
+               delete __pConfCallInfo;
+               __pConfCallInfo = null;
+       }
+       //show 1st caller's info.
+       //Fetch Conference call info from telephony manager
+       __pConfCallInfo = __pCallPresentor->GetConferenceCallInfoN();
+
+       //show active call timer
+       ShowTimerInfo(IDC_CALL_TIME_LABEL, __pConfCallInfo->GetCallConnectTime());
+
+       //Set the correct bitmap to the "hold" button based on the current state of the call
+       SetHoldButtonStatus(__pConfCallInfo->IsOnHold());
+       //disable Hold Button, if 2 active calls are present,Else enable it.
+       Button* pButtonHold = static_cast<Button*>(GetControl(IDC_HOLD_CONFCALL_BUTTON));
+       if(pButtonHold != null)
+       {
+               if (__pCallPresentor->GetCurrentCallCount() == IDI_MAX_ACTIVE_CALLS)
+               {
+                       pButtonHold->SetShowState(false);
+               }
+               else
+               {
+                       pButtonHold->SetShowState(true);
+               }
+               pButtonHold->Invalidate(true);
+       }
+
+       __pList->UpdateTableView();
+       //ActivatePanels();
+}
+
+void
+ConfCallerListForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId)
+{
+       RemoveOrientationEventListener(*this);
+       if (__pConfCallInfo != null)
+       {
+               delete __pConfCallInfo;
+               __pConfCallInfo = null;
+       }
+       if (__pConfCallTimer != null)
+       {
+               __pConfCallTimer->Cancel();
+               delete __pConfCallTimer;
+               __pConfCallTimer = null;
+       }
+}
+
+result
+ConfCallerListForm::OnDraw(void)
+{
+       return E_SUCCESS;
+}
+
+void
+ConfCallerListForm::SetHoldButtonStatus(bool isCallOnHold)
+{
+       Button* pButtonHold = static_cast<Button*>(GetControl(IDC_HOLD_CONFCALL_BUTTON));
+       if(pButtonHold != null)
+       {
+               Bitmap* pNormalBitmapToBeDrawn = null;
+               Bitmap* pPressBitmapToBeDrawn = null;
+
+               if (isCallOnHold == true)
+               {
+                       pNormalBitmapToBeDrawn = AppUtility::GetBitmapFromResourcesN(IDB_UNHOLD_NORMAL_BUTTON_ICON,
+                                       W_HOLD_BITMAP, W_HOLD_BITMAP);
+                       pPressBitmapToBeDrawn = AppUtility::GetBitmapFromResourcesN(IDB_UNHOLD_PRESS_BUTTON_ICON,
+                                       W_HOLD_BITMAP, W_HOLD_BITMAP);
+               }
+               else
+               {
+                       pNormalBitmapToBeDrawn = AppUtility::GetBitmapFromResourcesN(IDB_HOLD_NORMAL_BUTTON_ICON,
+                                       W_HOLD_BITMAP, W_HOLD_BITMAP);
+                       pPressBitmapToBeDrawn = AppUtility::GetBitmapFromResourcesN(IDB_HOLD_PRESS_BUTTON_ICON,
+                                       W_HOLD_BITMAP, W_HOLD_BITMAP);
+               }
+
+               if (pNormalBitmapToBeDrawn)
+               {
+                       pButtonHold->SetNormalBitmap(Point(0, 0), *pNormalBitmapToBeDrawn);
+               }
+               if (pPressBitmapToBeDrawn)
+               {
+                       pButtonHold->SetPressedBitmap(Point(0, 0), *pPressBitmapToBeDrawn);
+               }
+
+               pButtonHold->Invalidate(true);
+               delete pNormalBitmapToBeDrawn;
+               pNormalBitmapToBeDrawn = null;
+               delete pPressBitmapToBeDrawn;
+               pPressBitmapToBeDrawn = null;
+       }
+}
+
+void
+ConfCallerListForm::HandleParticipantsChanged(void)
+{
+       CallInfo* pCallInfo = __pCallPresentor->GetConferenceCallInfoN();
+       if (pCallInfo == null)
+       {
+               return;
+       }
+       if (__pConfCallInfo != null)
+       {
+               delete __pConfCallInfo;
+               __pConfCallInfo = null;
+       }
+       __pConfCallInfo = new (std::nothrow) CallInfo();
+       *__pConfCallInfo = *pCallInfo;
+       //Disable all key panels and redraw with new caller list
+       //DisableAllControls();
+       //ActivatePanels();
+       __pList->UpdateTableView();
+}
+
+void
+ConfCallerListForm::DisableAllControls(void)
+{
+       Panel* pKeysPanel = static_cast<Panel*>(GetControl(IDC_CALLER1_PANEL));
+       if (pKeysPanel != null)
+       {
+               pKeysPanel->SetShowState(false);
+               Label* pLineLabel1 = static_cast<Label*>(GetControl(IDC__LINE_LABEL1));
+               pLineLabel1->SetShowState(false);
+               pKeysPanel = null;
+       }
+       pKeysPanel = static_cast<Panel*>(GetControl(IDC_CALLER2_PANEL));
+       if (pKeysPanel != null)
+       {
+               pKeysPanel->SetShowState(false);
+               Label* pLineLabel1 = static_cast<Label*>(GetControl(IDC__LINE_LABEL2));
+               pLineLabel1->SetShowState(false);
+               pKeysPanel = null;
+       }
+       pKeysPanel = static_cast<Panel*>(GetControl(IDC_CALLER3_PANEL));
+       if (pKeysPanel != null)
+       {
+               pKeysPanel->SetShowState(false);
+               Label* pLineLabel1 = static_cast<Label*>(GetControl(IDC__LINE_LABEL3));
+               pLineLabel1->SetShowState(false);
+               pKeysPanel = null;
+       }
+       pKeysPanel = static_cast<Panel*>(GetControl(IDC_CALLER4_PANEL));
+       if (pKeysPanel != null)
+       {
+               pKeysPanel->SetShowState(false);
+               Label* pLineLabel1 = static_cast<Label*>(GetControl(IDC__LINE_LABEL4));
+               pLineLabel1->SetShowState(false);
+               pKeysPanel = null;
+       }
+       pKeysPanel = static_cast<Panel*>(GetControl(IDC_CALLER5_PANEL));
+       if (pKeysPanel != null)
+       {
+               pKeysPanel->SetShowState(false);
+               Label* pLineLabel1 = static_cast<Label*>(GetControl(IDC__LINE_LABEL5));
+               pLineLabel1->SetShowState(false);
+               pKeysPanel = null;
+       }
+}
+
+void
+ConfCallerListForm::ActivatePanels(void)
+{
+       IListT<CallInfo>* pCallList = __pConfCallInfo->GetCallerList();
+       int confCallCount = pCallList->GetCount();
+
+       for (int index = 0; index < confCallCount; index++)
+       {
+               CallInfo callInfo;
+               String pContactNo;
+               result r = pCallList->GetAt(index, callInfo);
+               if(callInfo.GetContactNumber().IsEmpty() == false)
+               {
+                       pContactNo.Append(callInfo.GetContactNumber());
+               }
+               else
+               {
+                       pContactNo.Append(AppUtility::GetResourceString(IDS_NUMBER_UNKNOWN));
+               }
+
+               //fetch contact details based on phone number
+               String* pDisplayName = callInfo.FetchCallerNameN();
+
+               if ((pDisplayName->IsEmpty()) || r != E_SUCCESS)
+               {
+                       pDisplayName->Append(pContactNo);
+               }
+
+               switch (index)
+               {
+               case 0:
+               {
+                       ActivatePanelAndAddActionListener(IDC_CALLER1_PANEL,IDC__LINE_LABEL1,IDC_SPLIT_CALLER1,IDC_END_CALLER1
+                                       ,IDC_CALLER1_LABEL,IDA_SPLIT_CALLER1,IDA_END_CALLER1,*pDisplayName);
+               }
+               break;
+
+               case 1:
+               {
+                       ActivatePanelAndAddActionListener(IDC_CALLER2_PANEL,IDC__LINE_LABEL2,IDC_SPLIT_CALLER2,IDC_END_CALLER2
+                                       ,IDC_CALLER2_LABEL,IDA_SPLIT_CALLER2,IDA_END_CALLER2,*pDisplayName);
+               }
+               break;
+
+               case 2:
+               {
+                       ActivatePanelAndAddActionListener(IDC_CALLER3_PANEL,IDC__LINE_LABEL3,IDC_SPLIT_CALLER3,IDC_END_CALLER3
+                                       ,IDC_CALLER3_LABEL,IDA_SPLIT_CALLER3,IDA_END_CALLER3,*pDisplayName);
+               }
+               break;
+
+               case 3:
+               {
+                       ActivatePanelAndAddActionListener(IDC_CALLER4_PANEL,IDC__LINE_LABEL4,IDC_SPLIT_CALLER4,IDC_END_CALLER4
+                                       ,IDC_CALLER4_LABEL,IDA_SPLIT_CALLER4,IDA_END_CALLER4,*pDisplayName);
+               }
+               break;
+
+               case 4:
+               {
+                       ActivatePanelAndAddActionListener(IDC_CALLER5_PANEL,IDC__LINE_LABEL5,IDC_SPLIT_CALLER5,IDC_END_CALLER5
+                                       ,IDC_CALLER5_LABEL,IDA_SPLIT_CALLER5,IDA_END_CALLER5,*pDisplayName);
+               }
+               break;
+
+               default:
+                       break;
+               }
+
+               delete pDisplayName;
+               pDisplayName = null;
+       }
+}
+
+void
+ConfCallerListForm::ActivatePanelAndAddActionListener( const String& panelName, const String& lineLabelName, const String& splitButtonName,
+               const String& endButtonName, const String& callerLabelName, SplitConfCallerCmdIds splitCmdId,
+               EndConfCallerCmdIds EndCmdId, const String& displayName)
+{
+       Bitmap* pNormalSplitBitmap = null;
+       Bitmap* pPressSplitBitmap = null;
+
+
+       Bitmap* pNormalEndBitmap = null;
+       Bitmap* pPressEndBitmap = null;
+
+
+
+       pNormalSplitBitmap = AppUtility::GetBitmapFromResourcesN(IDB_SPLIT_NORMAL_BUTTON_ICON,
+                       W_SPLIT_BITMAP, H_SPLIT_BITMAP);
+       pPressSplitBitmap = AppUtility::GetBitmapFromResourcesN(IDB_SPLIT_PRESS_BUTTON_ICON,
+                       W_SPLIT_BITMAP, H_SPLIT_BITMAP);
+       pNormalEndBitmap = AppUtility::GetBitmapFromResourcesN(IDB_END_NORMAL_BUTTON_ICON,
+                       W_END_BITMAP, H_END_BITMAP);
+       pPressEndBitmap = AppUtility::GetBitmapFromResourcesN(IDB_END_PRESS_BUTTON_ICON,
+                       W_END_BITMAP, H_END_BITMAP);
+
+       bool isSplitAllowed = true;
+       if ((__pCallPresentor->IsSplitAllowed() == false) || (__pConfCallInfo->IsOnHold() == true))
+       {
+               isSplitAllowed = false;
+       }
+
+       Panel* pKeysPanel = static_cast<Panel*>(GetControl(panelName));
+       if (pKeysPanel != null)
+       {
+               Button* pButtonSplit = static_cast<Button*>(pKeysPanel->GetControl(splitButtonName));
+               if (pButtonSplit != null)
+               {
+                       pButtonSplit->SetActionId(splitCmdId);
+                       pButtonSplit->AddActionEventListener(*this);
+                       pButtonSplit->SetNormalBitmap(Point(0, 0), *pNormalSplitBitmap);
+                       pButtonSplit->SetPressedBitmap(Point(0, 0), *pPressSplitBitmap);
+               }
+               Button* pButtonEnd = static_cast<Button*>(pKeysPanel->GetControl(endButtonName));
+               if (pButtonEnd != null)
+               {
+                       pButtonEnd->SetActionId(EndCmdId);
+                       pButtonEnd->AddActionEventListener(*this);
+                       pButtonEnd->SetNormalBitmap(Point(0, 0), *pNormalEndBitmap);
+                       pButtonEnd->SetPressedBitmap(Point(0, 0), *pPressEndBitmap);
+               }
+               Label* pNameLabel = static_cast<Label*>(pKeysPanel->GetControl(callerLabelName));
+               if (pButtonSplit != null)
+               {
+                       if (isSplitAllowed == false)
+                       {
+                               pButtonSplit->SetShowState(false);
+                               pNameLabel->SetBounds(pButtonSplit->GetBounds().x, pNameLabel->GetBounds().y,
+                                               pNameLabel->GetBounds().width, pNameLabel->GetBounds().height);
+                       }
+                       else
+                       {
+                               pButtonSplit->SetShowState(true);
+                               pNameLabel->SetBounds((pButtonSplit->GetBounds().x + pButtonSplit->GetBounds().width), pNameLabel->GetBounds().y,
+                                               pNameLabel->GetBounds().width, pNameLabel->GetBounds().height);
+                       }
+               }
+               pNameLabel->SetText(displayName);
+
+               pKeysPanel->SetShowState(true);
+               Label* pLineLabel1 = static_cast<Label*>(GetControl(lineLabelName));
+               pLineLabel1->SetShowState(true);
+
+               pKeysPanel->Draw(true);
+               pKeysPanel->Show();
+       }
+
+       delete pNormalEndBitmap;
+       pNormalEndBitmap = null;
+       delete pPressEndBitmap;
+       pPressEndBitmap = null;
+       delete pNormalSplitBitmap;
+       pNormalSplitBitmap = null;
+       delete pPressSplitBitmap;
+       pPressSplitBitmap = null;
+}
+
+void
+ConfCallerListForm::ShowTimerInfo(const String& timerLblName, long long startTime)
+{
+       Label* pTimerLbl = static_cast<Label*>(GetControl(timerLblName));
+
+       if (__pConfCallTimer == null)
+       {
+               __pConfCallTimer = new (std::nothrow) Timer();
+               __pConfCallTimer->Construct(*this);
+       }
+
+       if (pTimerLbl != null)
+       {
+               //current system time
+               long long currTime = 0;
+               SystemTime::GetTicks(currTime);
+               //Set call duration
+               TimeSpan diffSpan(abs(startTime - currTime));
+
+               String activeCallTime(L"");
+
+               long long hr = diffSpan.GetHours();
+               if (hr <= 9) {
+                       activeCallTime.Append("0");
+               }
+               activeCallTime.Append(hr);
+               activeCallTime.Append(L":");
+
+               long long min = diffSpan.GetMinutes();
+               if (min <= 9) {
+                       activeCallTime.Append("0");
+               }
+               activeCallTime.Append(min);
+               activeCallTime.Append(L":");
+
+               long long sec = diffSpan.GetSeconds();
+               if (sec <= 9) {
+                       activeCallTime.Append("0");
+               }
+               activeCallTime.Append(sec);
+
+               pTimerLbl->SetText(activeCallTime);
+               __pConfCallTimer->StartAsRepeatable(TimeSpan::NUM_OF_TICKS_IN_SECOND);
+
+       }
+}
+
+void
+ConfCallerListForm::OnTimerExpired(Tizen::Base::Runtime::Timer& timer)
+{
+       //Call default implementation of "Object.Equals()"
+       //returns true, if they are pointing to same address.
+       if (__pConfCallTimer->Equals(timer))
+       {
+               Label* pTimerLbl = static_cast<Label*>(GetControl(IDC_CALL_TIME_LABEL));
+               if (pTimerLbl)
+               {
+                       String activeCallTime = pTimerLbl->GetText();
+                       // Create a StringTokenizer instance
+                       StringTokenizer strTokens(activeCallTime, L":");
+
+                       int count = strTokens.GetTokenCount(); // count == 3
+                       String token;
+                       int sec = 0;
+                       int min = 0;
+                       int hr = 0;
+                       for (int index = 0; index < count; index++)
+                       {
+                               switch (index)
+                               {
+                               case 0:
+                                       strTokens.GetNextToken(token);
+                                       Integer::Parse(token, hr);
+                                       break;
+
+                               case 1:
+                                       strTokens.GetNextToken(token);
+                                       Integer::Parse(token, min);
+                                       break;
+
+                               case 2:
+                                       strTokens.GetNextToken(token);
+                                       Integer::Parse(token, sec);
+                                       break;
+                               }
+                       }
+                       //update all values
+                       sec = sec + 1;
+                       if (sec == IDI_MAX_SECONDS)
+                       {
+                               sec = 0;
+                               min = min + 1;
+                       }
+                       if (min == IDI_MAX_MINS)
+                       {
+                               min = 0;
+                               hr = hr + 1;
+                       }
+
+                       //replace string
+                       activeCallTime.Clear();
+                       if (hr <= 9)
+                       {
+                               activeCallTime.Append("0");
+                       }
+                       activeCallTime.Append(hr);
+                       activeCallTime.Append(":");
+                       if (min <= 9)
+                       {
+                               activeCallTime.Append("0");
+                       }
+                       activeCallTime.Append(min);
+                       activeCallTime.Append(":");
+                       if (sec <= 9)
+                       {
+                               activeCallTime.Append("0");
+                       }
+                       activeCallTime.Append(sec);
+                       //update timer label
+                       pTimerLbl->SetText(activeCallTime);
+                       pTimerLbl->Invalidate(true);
+               }
+       }
+}
+
+void
+ConfCallerListForm::OnFormBackRequested(Form& source)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       AppAssert(pSceneManager);
+
+       ArrayListT<CallInfo>* pCallList  = static_cast<ArrayListT<CallInfo>*>(__pCallPresentor->GetCallListN());
+       int noOfCalls = pCallList->GetCount();
+
+       //Ownership - To be deleted in 'OnSceneActivatedN' of next form
+       ArrayList* pCallInfoList = new (std::nothrow) ArrayList(SingleObjectDeleter);
+       pCallInfoList->Construct(noOfCalls);
+
+       for (int index = 0; index < noOfCalls; index++)
+       {
+               //fetch call info and add to list
+               CallInfo callInfo;
+               result r = pCallList->GetAt(index, callInfo);
+               if (r == E_SUCCESS)
+               {
+                       //copy call information to new instance
+                       CallInfo* pCaller = new (std::nothrow) CallInfo();
+                       *pCaller = callInfo;
+                       pCallInfoList->Add(pCaller);
+               }
+       }
+
+       if (noOfCalls == 1)
+       {
+               //single active call - goto active call form
+               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_CONFCALL), pCallInfoList);
+       }
+       else
+       {
+               //goto multiple active call form
+               pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_MULTIPLEACTIVECALL), pCallInfoList);
+       }
+       pCallList->RemoveAll();
+       delete pCallList;
+
+}
+
+void
+ConfCallerListForm::CreateItemAndAddActionListener( Button& splitButton,
+               Button& endButton, Label& callerLabel, SplitConfCallerCmdIds splitCmdId,
+               EndConfCallerCmdIds EndCmdId, const String& displayName)
+{
+       Bitmap* pNormalSplitBitmap = null;
+       Bitmap* pPressSplitBitmap = null;
+       Bitmap* pNormalEndBitmap = null;
+       Bitmap* pPressEndBitmap = null;
+
+       pNormalSplitBitmap = AppUtility::GetBitmapFromResourcesN(IDB_SPLIT_NORMAL_BUTTON_ICON,
+                       W_SPLIT_BITMAP, H_SPLIT_BITMAP);
+       pPressSplitBitmap = AppUtility::GetBitmapFromResourcesN(IDB_SPLIT_PRESS_BUTTON_ICON,
+                       W_SPLIT_BITMAP, H_SPLIT_BITMAP);
+       pNormalEndBitmap = AppUtility::GetBitmapFromResourcesN(IDB_END_NORMAL_BUTTON_ICON,
+                       W_END_BITMAP, H_END_BITMAP);
+       pPressEndBitmap = AppUtility::GetBitmapFromResourcesN(IDB_END_PRESS_BUTTON_ICON,
+                       W_END_BITMAP, H_END_BITMAP);
+
+       bool isSplitAllowed = true;
+       if ((__pCallPresentor->IsSplitAllowed() == false) || (__pConfCallInfo->IsOnHold() == true))
+       {
+               isSplitAllowed = false;
+       }
+
+       splitButton.SetActionId(splitCmdId);
+       splitButton.AddActionEventListener(*this);
+       splitButton.SetColor(BUTTON_STATUS_NORMAL,COLOR_SPLIT_CALL_BG);
+       splitButton.SetColor(BUTTON_STATUS_PRESSED,COLOR_SPLIT_CALL_BG_PRESS);
+       splitButton.SetNormalBitmap(Point(0, 0), *pNormalSplitBitmap);
+       splitButton.SetPressedBitmap(Point(0, 0), *pPressSplitBitmap);
+
+
+
+       endButton.SetActionId(EndCmdId);
+       endButton.AddActionEventListener(*this);
+       endButton.SetNormalBitmap(Point(0, 0), *pNormalEndBitmap);
+       endButton.SetColor(BUTTON_STATUS_NORMAL,COLOR_END_CALL_BG);
+       endButton.SetColor(BUTTON_STATUS_PRESSED,COLOR_END_CALL_BG_PRESS);
+       endButton.SetPressedBitmap(Point(0, 0), *pPressEndBitmap);
+
+
+       if (isSplitAllowed == false)
+       {
+               splitButton.SetShowState(false);
+               callerLabel.SetBounds(splitButton.GetBounds().x, callerLabel.GetBounds().y,
+               callerLabel.GetBounds().width, callerLabel.GetBounds().height);
+       }
+       else
+       {
+               splitButton.SetShowState(true);
+               callerLabel.SetBounds((splitButton.GetBounds().x + splitButton.GetBounds().width), callerLabel.GetBounds().y,
+                               callerLabel.GetBounds().width, callerLabel.GetBounds().height);
+       }
+
+
+       callerLabel.SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+       callerLabel.SetText(displayName);
+       delete pNormalEndBitmap;
+       pNormalEndBitmap = null;
+       delete pPressEndBitmap;
+       pPressEndBitmap = null;
+       delete pNormalSplitBitmap;
+       pNormalSplitBitmap = null;
+       delete pPressSplitBitmap;
+       pPressSplitBitmap = null;
+}
+
+int
+ConfCallerListForm::GetItemCount(void)
+{
+       IListT<CallInfo>* pCallList = __pConfCallInfo->GetCallerList();
+       return pCallList->GetCount();
+}
+
+TableViewItem*
+ConfCallerListForm::CreateItem(int itemIndex, int itemWidth)
+{
+       IListT<CallInfo>* pCallList = __pConfCallInfo->GetCallerList();
+
+       TableViewAnnexStyle style = TABLE_VIEW_ANNEX_STYLE_NORMAL;
+       TableViewItem* pItem = new (std::nothrow) TableViewItem();
+
+       pItem->Construct(Tizen::Graphics::Dimension(GetBounds().width, LIST_ITEM_HEIGHT), style);
+
+       Button *pSplitCallButton = new (std::nothrow) Button();
+       pSplitCallButton->Construct(Rectangle(X_SPLIT_BUTTON_MARGIN,Y_SPLIT_BUTTON_MARGIN,W_SPLIT_BITMAP,W_SPLIT_BITMAP));
+
+       Label *pCallLabel =  new (std::nothrow)Label();
+       pCallLabel->Construct(Rectangle(X_CALLER_LABEL,Y_CALLER_LABEL,W_CALLER_LABEL,H_CALLER_LABEL),L"");
+
+       Button *pEndCallButton =  new (std::nothrow)Button();
+       pEndCallButton->Construct(Rectangle(GetBounds().width-X_END_BUTTON_PADDING-W_SPLIT_BITMAP,Y_SPLIT_BUTTON_MARGIN,W_SPLIT_BITMAP,W_SPLIT_BITMAP));
+
+
+       CallInfo callInfo;
+       String pContactNo;
+       result r = pCallList->GetAt(itemIndex, callInfo);
+
+       if(callInfo.GetContactNumber().IsEmpty() == false)
+       {
+               pContactNo.Append(callInfo.GetContactNumber());
+       }
+       else
+       {
+               pContactNo.Append(AppUtility::GetResourceString(IDS_NUMBER_UNKNOWN));
+       }
+       //fetch contact details based on phone number
+       String* pDisplayName = callInfo.FetchCallerNameN();
+
+       if ((pDisplayName->IsEmpty()) || r != E_SUCCESS)
+       {
+               pDisplayName->Append(pContactNo);
+       }
+       switch (itemIndex)
+       {
+               case 0:
+               {
+                       CreateItemAndAddActionListener(*pSplitCallButton,*pEndCallButton,*pCallLabel,
+                                       IDA_SPLIT_CALLER1,IDA_END_CALLER1,*pDisplayName);
+               }
+               break;
+               case 1:
+               {
+                       CreateItemAndAddActionListener(*pSplitCallButton,*pEndCallButton,*pCallLabel,
+                                       IDA_SPLIT_CALLER2,IDA_END_CALLER2,*pDisplayName);
+               }
+               break;
+               case 2:
+               {
+                       CreateItemAndAddActionListener(*pSplitCallButton,*pEndCallButton,*pCallLabel,
+                                       IDA_SPLIT_CALLER3,IDA_END_CALLER3,*pDisplayName);
+               }
+               break;
+               case 3:
+               {
+                       CreateItemAndAddActionListener(*pSplitCallButton,*pEndCallButton,*pCallLabel,
+                                       IDA_SPLIT_CALLER4,IDA_END_CALLER4,*pDisplayName);
+               }
+               break;
+               case 4:
+               {
+                       CreateItemAndAddActionListener(*pSplitCallButton,*pEndCallButton,*pCallLabel,
+                                       IDA_SPLIT_CALLER5,IDA_END_CALLER5,*pDisplayName);
+               }
+               break;
+               default:
+                       break;
+       }
+       pItem->AddControl(*pSplitCallButton);
+       pItem->AddControl(*pCallLabel);
+       pItem->AddControl(*pEndCallButton);
+       return pItem;
+
+
+}
+
+bool
+ConfCallerListForm::DeleteItem(int itemIndex, TableViewItem* pItem)
+{
+       return false;
+}
+
+void
+ConfCallerListForm::UpdateItem(int itemIndex, TableViewItem* pItem)
+{
+       return ;
+}
+
+int
+ConfCallerListForm::GetDefaultItemHeight(void)
+{
+       return LIST_ITEM_HEIGHT;
+}
+
+void
+ConfCallerListForm::OnOrientationChanged(const Control& source, OrientationStatus orientationStatus)
+{
+       AppLogDebug("Enter");
+       __pList->UpdateTableView();
+}
diff --git a/src/CallDtmfKeypadPanel.cpp b/src/CallDtmfKeypadPanel.cpp
new file mode 100644 (file)
index 0000000..c3bfcf4
--- /dev/null
@@ -0,0 +1,532 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file    CallDtmfKeypadPanel.cpp
+ * @brief      Dtmf keypad implementation class
+ */
+#include <FApp.h>
+#include <FMedia.h>
+#include "CallAppUtility.h"
+#include "CallCommonUtils.h"
+#include "CallDtmfKeypadPanel.h"
+#include "CallTypes.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Graphics;
+using namespace Tizen::Media;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+
+const int W_VOICE_CALL_ICON = 70;
+const int H_VOICE_CALL_ICON = 36;
+const int INITIAL_X_OFFSET = 13;
+const int LEFT_X_OFFSET = 77;
+const int RIGHT_X_OFFSET = 121;
+const int INITIAL_TEXT_X_OFFSET = 24;
+const int LEFT_TEXT_X_OFFSET = 64;
+const int LEFT_TEXT_X_MARGIN = 18;
+const int RIGHT_TEXT_X_OFFSET = 94;
+const int W_DTMF_BTN = 212;
+const int H_DTMF_BTN = 134;
+const Color COLOR_KEYPAD_BG(0, 0, 0, 100);
+const wchar_t* IDC_TEXTBOX = L"IDC_TEXTBOX";
+const wchar_t* IDC_BUTTON = L"IDC_BUTTON";
+const wchar_t* IDC_DTMF_KEY_BG_LABEL = L"IDC_DTMF_KEY_BG_LABEL";
+
+DtmfKeyPadPanel::DtmfKeyPadPanel(void)
+{
+       __pActionListener = null;
+}
+
+DtmfKeyPadPanel::~DtmfKeyPadPanel(void)
+{
+}
+
+bool
+DtmfKeyPadPanel::Initialize(IActionEventListener* pEventListener, Rectangle& boundsRect)
+{
+       result r = Construct(IDL_DTMF_PANEL);
+       if (IsFailed(r))
+       {
+               return false;
+       }
+
+       r = SetBounds(boundsRect);
+       if (IsFailed(r))
+       {
+               return false;
+       }
+
+       //disable auto link detection
+       TextBox* pTextBox = static_cast<TextBox*>(GetControl(IDC_TEXTBOX));
+       if (pTextBox != null)
+       {
+               pTextBox->SetAutoLinkMask(0);
+       }
+       __pActionListener = pEventListener;
+       return true;
+}
+
+result
+DtmfKeyPadPanel::OnInitializing(void)
+{
+       RelativeLayout* pRelativeLayout = dynamic_cast<RelativeLayout*>(GetParent()->GetPortraitLayoutN());
+       if (pRelativeLayout != null)
+       {
+               pRelativeLayout->Update();
+               delete pRelativeLayout;
+       }
+
+       pRelativeLayout = dynamic_cast<RelativeLayout*>(GetParent()->GetLandscapeLayoutN());
+       if (pRelativeLayout != null)
+       {
+               pRelativeLayout->Update();
+               delete pRelativeLayout;
+       }
+
+       //Set background bitmap
+       Label* pKeyBgLbl = static_cast<Label*>(GetControl(IDC_DTMF_KEY_BG_LABEL, true));
+       Bitmap* pKeyBgBitmap = AppUtility::GetBitmapFromResourcesN(IDB_KEYPAD_BG, pKeyBgLbl->GetWidth(), pKeyBgLbl->GetHeight());
+       if (pKeyBgBitmap != null)
+       {
+               pKeyBgLbl->SetBackgroundBitmap(*pKeyBgBitmap);
+               delete pKeyBgBitmap;
+               pKeyBgBitmap = null;
+       }
+
+       //DTMF Keys panel
+       Panel* pKeysPanel = new (std::nothrow) Panel();
+       pKeysPanel->Construct(IDL_DTMF_KEYS_PANEL);
+       pKeysPanel->SetBounds(pKeyBgLbl->GetBounds());
+       AddControl(*pKeysPanel);
+
+       //Add action listener and bg to buttons.
+       AddListenersToButtons();
+       result r = SetBackgroundtoButton();
+       return r;
+}
+
+void
+DtmfKeyPadPanel::AddListenersToButtons()
+{
+       for (int i = NUM_KEY1; i <= HASH_KEY; ++i)
+       {
+               String buttonName(IDC_BUTTON);
+               buttonName.Append(i);
+               Button* pButton = static_cast<Button*>(GetControl(buttonName, true));
+               if(pButton == null)
+               {
+                       continue;
+               }
+               pButton->SetActionId(i);
+               SetControlAlwaysOnTop(*pButton,true);
+               //Add Listeners
+               if(__pActionListener != null)
+               {
+                       pButton->AddActionEventListener(*__pActionListener);
+               }
+       }
+}
+
+result
+DtmfKeyPadPanel::SetBackgroundtoButton()
+{
+       AppLogDebug("ENTER");
+       result r = E_FAILURE;
+       for (int i = 1; i <= 12; i++)
+       {
+               String buttonName(IDC_BUTTON);
+               buttonName.Append(i);
+               Button* pButton = static_cast<Button*>(GetControl(buttonName,true));
+               if(pButton == null)
+               {
+                       continue;
+               }
+
+               //normal bg bitmap
+               Rectangle canvasRect(0, 0, W_DTMF_BTN, H_DTMF_BTN);
+               Canvas canvasNormal;
+               canvasNormal.Construct(canvasRect);
+               canvasNormal.SetBackgroundColor(Color(255,255,255,0));
+               canvasNormal.Clear();
+               //pressed bg bitmap
+               Canvas canvasPressed;
+               canvasPressed.Construct(canvasRect);
+
+               String number(DialUtil::ConvertDialedNumberToString(pButton->GetActionId()));
+               switch (pButton->GetActionId())
+               {
+               case NUM_KEY1:
+               {
+                       DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
+                       DrawImageToCanvas(IDB_KEYPAD_NUM1_ICON, Dimension(W_VOICE_CALL_ICON, H_VOICE_CALL_ICON), canvasNormal, POSITION_RIGHT);
+
+                       //Set canvas for pressed state of the button
+                       r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
+                       TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
+                       DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
+                       DrawImageToCanvas(IDB_KEYPAD_NUM1_ICON, Dimension(W_VOICE_CALL_ICON, H_VOICE_CALL_ICON), canvasPressed, POSITION_RIGHT);
+               }
+               break;
+
+               case NUM_KEY2:
+               {
+                       DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
+                       DrawTextToCanvas(IDI_KEY2_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
+
+                       //Set canvas for pressed state of the button
+                       r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
+                       TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
+                       DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
+                       DrawTextToCanvas(IDI_KEY2_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
+               }
+               break;
+
+               case NUM_KEY3:
+               {
+                       DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
+                       DrawTextToCanvas(IDI_KEY3_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
+
+                       r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
+                       TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
+                       DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
+                       DrawTextToCanvas(IDI_KEY3_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
+               }
+               break;
+
+               case NUM_KEY4:
+               {
+                       DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
+                       DrawTextToCanvas(IDI_KEY4_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
+
+                       r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
+                       TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
+                       DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
+                       DrawTextToCanvas(IDI_KEY4_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
+               }
+               break;
+
+               case NUM_KEY5:
+               {
+                       DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
+                       DrawTextToCanvas(IDI_KEY5_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
+
+                       r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
+                       TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
+                       DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
+                       DrawTextToCanvas(IDI_KEY5_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
+               }
+               break;
+
+               case NUM_KEY6:
+               {
+                       DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
+                       DrawTextToCanvas(IDI_KEY6_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
+
+                       r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
+                       TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
+                       DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
+                       DrawTextToCanvas(IDI_KEY6_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
+               }
+               break;
+
+               case NUM_KEY7:
+               {
+                       DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
+                       DrawTextToCanvas(IDI_KEY7_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
+
+                       r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
+                       TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
+                       DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
+                       DrawTextToCanvas(IDI_KEY7_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
+               }
+               break;
+
+               case NUM_KEY8:
+               {
+                       DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
+                       DrawTextToCanvas(IDI_KEY8_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
+
+                       r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
+                       TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
+                       DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
+                       DrawTextToCanvas(IDI_KEY8_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
+               }
+               break;
+
+               case NUM_KEY9:
+               {
+                       DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
+                       DrawTextToCanvas(IDI_KEY9_TXT, FONT_KEYPAD_TEXT, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
+
+                       r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
+                       TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
+                       DrawTextToCanvas(number, FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
+                       DrawTextToCanvas(IDI_KEY9_TXT, FONT_KEYPAD_TEXT, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
+               }
+               break;
+
+               case PAUSE_KEY:
+               {
+                       DrawImageToCanvas(IDB_DIALER_STAR_ICON, Dimension(75, 36), canvasNormal, POSITION_LEFT);
+                       DrawTextToCanvas(L"P", FONT_KEYPAD_P, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
+
+                       r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
+                       TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
+                       DrawImageToCanvas(IDB_DIALER_STAR_ICON, Dimension(75, 36), canvasPressed, POSITION_LEFT);
+                       DrawTextToCanvas(L"P", FONT_KEYPAD_P, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
+               }
+               break;
+
+               case NUM_KEY0:
+               {
+                       DrawTextToCanvas(L"0", FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
+                       DrawTextToCanvas(L"+", FONT_KEYPAD_PLUS, canvasNormal, POSITION_RIGHT, BUTTON_STATUS_NORMAL);
+
+                       r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
+                       TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
+                       DrawTextToCanvas(L"0", FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
+                       DrawTextToCanvas(L"+", FONT_KEYPAD_PLUS, canvasPressed, POSITION_RIGHT, BUTTON_STATUS_PRESSED);
+               }
+               break;
+
+               case HASH_KEY:
+               {
+                       DrawTextToCanvas(L"#", FONT_KEYPAD_NUMBER, canvasNormal, POSITION_LEFT, BUTTON_STATUS_NORMAL);
+
+                       r = SetPressedBgToCanvas(canvasPressed, IDB_KEYPAD_BUTTON_PRESS);
+                       TryCatch(r == E_SUCCESS,,"DtmfKeyPadPanel::AddButtonsToKeypad() SetPressedBgToCanvas failed");
+                       DrawTextToCanvas(L"#", FONT_KEYPAD_NUMBER, canvasPressed, POSITION_LEFT, BUTTON_STATUS_PRESSED);
+               }
+
+               break;
+               }
+               //Set the final Bitmap to Button
+               DialUtil::DrawCanvasToButton(&canvasNormal, &canvasPressed, pButton);
+       }
+
+       AppLogDebug("EXIT");
+       return E_SUCCESS;
+
+CATCH:
+       RemoveAllControls();
+       return r;
+}
+
+result
+DtmfKeyPadPanel::SetPressedBgToCanvas(Canvas& canvas, const String& bgImg)
+{
+       //Construct a canvas
+       AppResource* pAppResource = AppResource::GetInstance();
+       Bitmap* pBitmap = pAppResource->GetBitmapN(bgImg);
+       if (pBitmap == null)
+       {
+               return E_FAILURE;
+       }
+
+       if (pBitmap->IsNinePatchedBitmap())
+       {
+               canvas.DrawNinePatchedBitmap(canvas.GetBounds(), *pBitmap);
+       }
+       else
+       {
+               pBitmap->SetScalingQuality(BITMAP_SCALING_QUALITY_MID);
+               pBitmap->Scale(Dimension(canvas.GetBounds().width, canvas.GetBounds().height));
+               canvas.DrawBitmap(Point(0,0), *pBitmap);
+       }
+       delete pBitmap;
+       return E_SUCCESS;
+}
+
+void
+DtmfKeyPadPanel::DrawImageToCanvas(const String& image, Dimension imageDimention, Canvas& canvas, int pos)
+{
+       //create and scale bitmap
+       AppResource* pAppResource = AppResource::GetInstance();
+       Bitmap* pBitmap = pAppResource->GetBitmapN(image);
+       pBitmap->SetScalingQuality(BITMAP_SCALING_QUALITY_MID);
+       pBitmap->Scale(imageDimention);
+
+       //Find position to draw bitmap
+       Point bitmapPos(0, 0);
+       switch (pos)
+       {
+       case POSITION_LEFT:
+       {
+               bitmapPos.SetPosition(INITIAL_X_OFFSET + (LEFT_X_OFFSET - pBitmap->GetWidth()) / 2, (canvas.GetBounds().height - pBitmap->GetHeight()) / 2);
+       }
+       break;
+
+       case POSITION_RIGHT:
+       {
+               bitmapPos.SetPosition(INITIAL_X_OFFSET + LEFT_X_OFFSET + ((RIGHT_X_OFFSET - pBitmap->GetWidth()) / 2), (canvas.GetBounds().height - pBitmap->GetHeight()) / 2);
+       }
+       break;
+
+       case POSITION_CENTER:
+       {
+               bitmapPos.SetPosition((canvas.GetBounds().width - pBitmap->GetWidth()) / 2, (canvas.GetBounds().height - pBitmap->GetHeight()) / 2);
+       }
+       break;
+       }
+
+       //draw bitmap
+       canvas.DrawBitmap(Rectangle(bitmapPos, Dimension(pBitmap->GetWidth(), pBitmap->GetHeight())), *pBitmap);
+       delete pBitmap;
+       pBitmap = null;
+}
+
+void
+DtmfKeyPadPanel::DrawTextToCanvas(const String& buttonText, int textFontStyle, Canvas& canvas, int pos, int buttonStatus)
+{
+       if (buttonText == null)
+       {
+               return;
+       }
+
+       //get text font
+       Font* font = GetTextFontN(textFontStyle);
+
+       //get text color
+       Color* textColor = GetTextColorN(textFontStyle, buttonStatus);
+
+       //create text element
+       TextElement* pTextElement = new (std::nothrow) TextElement();
+       pTextElement->Construct(buttonText);
+       pTextElement->SetTextColor(*textColor);
+       pTextElement->SetFont(*font);
+
+       //get dimensions of the text
+       Dimension textDimension;
+       font->GetTextExtent(buttonText, buttonText.GetLength(), textDimension);
+       textDimension.height = textDimension.height + font->GetDescender();
+       //create enriched text
+       EnrichedText* pEnrichedText = new (std::nothrow) EnrichedText();
+       pEnrichedText->Construct(textDimension);
+       pEnrichedText->Add(*pTextElement);
+
+       //set the position of the text in canvas
+       Point textPos(0, 0);
+       switch (pos)
+       {
+       case POSITION_LEFT:
+       {
+               textPos.SetPosition(INITIAL_TEXT_X_OFFSET + ((LEFT_TEXT_X_OFFSET - pEnrichedText->GetWidth()) / 2), (canvas.GetBounds().height - pEnrichedText->GetHeight()) / 2);
+       }
+       break;
+
+       case POSITION_RIGHT:
+       {
+               textPos.SetPosition(INITIAL_TEXT_X_OFFSET + LEFT_TEXT_X_OFFSET + LEFT_TEXT_X_MARGIN + ((RIGHT_TEXT_X_OFFSET - pEnrichedText->GetWidth()) / 2), (canvas.GetBounds().height - pEnrichedText->GetHeight()) / 2);
+       }
+       break;
+
+       case POSITION_CENTER:
+       {
+               textPos.SetPosition((canvas.GetBounds().width - pEnrichedText->GetWidth()) / 2, (canvas.GetBounds().height - pEnrichedText->GetHeight()) / 2);
+       }
+       break;
+       }
+
+       //Draw EnrichedText to canvas
+       canvas.DrawText(textPos, *pEnrichedText);
+
+       // Cleans up
+       pEnrichedText->RemoveAll(true);
+       delete pEnrichedText;
+       delete textColor;
+       delete font;
+}
+
+Font*
+DtmfKeyPadPanel::GetTextFontN(int textFontStyle)
+{
+       Font* font = new (std::nothrow) Font();
+
+       switch (textFontStyle)
+       {
+       case FONT_KEYPAD_NUMBER:
+       {
+               font->Construct(FONT_STYLE_PLAIN, 112);
+       }
+       break;
+
+       case FONT_KEYPAD_TEXT:
+       {
+               font->Construct(FONT_STYLE_PLAIN, 30);
+       }
+       break;
+
+       case FONT_KEYPAD_P:
+       {
+               font->Construct(FONT_STYLE_PLAIN, 60);
+       }
+       break;
+
+       case FONT_KEYPAD_PLUS:
+       {
+               font->Construct(FONT_STYLE_PLAIN, 64);
+       }
+       break;
+       }
+       return font;
+}
+
+Color*
+DtmfKeyPadPanel::GetTextColorN(int textColor, int buttonStatus)
+{
+       Color* color = new (std::nothrow) Color();
+
+       if (buttonStatus == BUTTON_STATUS_PRESSED)
+       {
+               color->SetColorComponents(255, 255, 255);
+               return color;
+       }
+
+       switch (textColor)
+       {
+       case FONT_KEYPAD_NUMBER:
+       {
+               color->SetColorComponents(242, 242, 242);
+       }
+       break;
+
+       case FONT_KEYPAD_TEXT:
+       {
+               color->SetColorComponents(197, 197, 197);
+       }
+       break;
+
+       case FONT_KEYPAD_P:
+       case FONT_KEYPAD_PLUS:
+       {
+               color->SetColorComponents(218, 218, 218);
+       }
+       break;
+       }
+       return color;
+}
+
+result
+DtmfKeyPadPanel::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+       RemoveAllControls();
+       return r;
+}
diff --git a/src/CallEndCallForm.cpp b/src/CallEndCallForm.cpp
new file mode 100644 (file)
index 0000000..1fc7e97
--- /dev/null
@@ -0,0 +1,634 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file    CallEndCallForm.cpp
+ * @brief      End Call form implementation
+ */
+#include <FApp.h>
+#include <FUi.h>
+#include <FMedia.h>
+#include "CallApp.h"
+#include "CallAppUtility.h"
+#include "CallEndCallForm.h"
+#include "CallButtonsPanel.h"
+#include "CallPresentationModel.h"
+#include "CallSceneRegister.h"
+#include "CallTypes.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Graphics;
+using namespace Tizen::Media;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+using namespace Tizen::Social;
+
+//constants
+const int IDI_APP_END_TIMER = 3000;
+const int W_PHOTO_LABEL = 720;
+const int H_PHOTO_LABEL = 720;
+const int X_PHOTO_LBL = 166;
+const int Y_PHOTO_LBL = 232;
+const int W_PHOTO_LBL = 388;
+const int H_PHOTO_LBL = 388;
+static const wchar_t* IDL_END_CALL_FORM = L"IDL_END_CALL_FORM";
+static const wchar_t* IDC_NUMBER1_LABEL = L"IDC_NUMBER1_LABEL";
+static const wchar_t* IDC_CALLER1_LABEL = L"IDC_CALLER1_LABEL";
+static const wchar_t* IDC_KEY_BG_LABEL = L"IDC_KEY_BG_LABEL";
+static const wchar_t* IDC_CALLER1_BIGPHOTO_LABEL = L"IDC_CALLER1_BIGPHOTO_LABEL";
+static const wchar_t* IDB_END_CALL_DEFAULT_ICON = L"C01-1_call_default_caller ID_720x720.png";
+
+
+EndCallForm::EndCallForm(void)
+: BaseForm(FORMTYPE_ENDCALL)
+{
+       __pCallButtonsPanel = null;
+       __pContactNumber = null;
+       __pEndCallEventTimer = null;
+       __pSmallPhotoLabel = null;
+       __isMsgAppControlLaunched = false;
+       __isContactAppControlLaunched = false;
+       __isContactPresent = false;
+}
+
+EndCallForm::~EndCallForm(void)
+{
+       if (__pEndCallEventTimer != null)
+       {
+               __pEndCallEventTimer->Cancel();
+               delete __pEndCallEventTimer;
+               __pEndCallEventTimer = null;
+       }
+       if (__pSmallPhotoLabel != null)
+       {
+               RemoveControl(*__pSmallPhotoLabel);
+               __pSmallPhotoLabel = null;
+       }
+}
+
+void
+EndCallForm::Initialize(void)
+{
+       Construct(IDL_END_CALL_FORM);
+}
+
+result
+EndCallForm::OnInitializing(void)
+{
+       result r = E_SUCCESS;
+
+       //initialize keypad and buttons
+       InitializeCallButtonsPanel();
+
+       __pEndCallEventTimer = new (std::nothrow) Tizen::Base::Runtime::Timer();
+       r = __pEndCallEventTimer->Construct(*this);
+
+       __pCallPresentor = CallPresentationModel::GetInstance();
+       return r;
+}
+
+void
+EndCallForm::InitializeCallButtonsPanel(void)
+{
+       Label* pKeysBgLbl = static_cast<Label*>(GetControl(IDC_KEY_BG_LABEL, true));
+       Bitmap* pBgBitmap = AppUtility::GetBitmapFromResourcesN(IDB_BACKGROUND_BITMAP, pKeysBgLbl->GetWidth(), pKeysBgLbl->GetHeight());
+       if (pBgBitmap != null)
+       {
+               pKeysBgLbl->SetBackgroundBitmap(*pBgBitmap);
+       }
+       if (__pCallButtonsPanel == null)
+       {
+               __pCallButtonsPanel = new (std::nothrow) CallButtonsPanel();
+               __pCallButtonsPanel->ConstructPanel(this, FORMTYPE_ENDCALL);
+               __pCallButtonsPanel->SetBounds(pKeysBgLbl->GetBounds());
+               AddControl(*__pCallButtonsPanel);
+       }
+
+       RelativeLayout* pRelativeLayout = dynamic_cast<RelativeLayout*>(GetPortraitLayoutN());
+       if (pRelativeLayout != null)
+       {
+               pRelativeLayout->SetRelation(*__pCallButtonsPanel, *pKeysBgLbl, RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM);
+       }
+       pRelativeLayout = dynamic_cast<RelativeLayout*>(GetLandscapeLayoutN());
+       if (pRelativeLayout != null)
+       {
+               pRelativeLayout->SetRelation(*__pCallButtonsPanel, *pKeysBgLbl, RECT_EDGE_RELATION_LEFT_TO_LEFT);
+               pRelativeLayout->SetRelation(*__pCallButtonsPanel, *pKeysBgLbl, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
+       }
+}
+
+void
+EndCallForm::AddKeyPadActionListener(const String& keyName, CommandIds cmdId)
+{
+       Button* pButton = static_cast<Button*>(GetControl(keyName));
+       if (pButton != null)
+       {
+               pButton->SetActionId(cmdId);
+               pButton->AddActionEventListener(*this);
+       }
+}
+
+result
+EndCallForm::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+
+       if (__pCallPresentor)
+       {
+               __pCallPresentor = null;
+       }
+       return r;
+}
+
+void
+EndCallForm::OnActionPerformed(const Control& source, int actionId)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       AppAssert(pSceneManager);
+
+       switch (actionId)
+       {
+       case IDA_VOICE_CALL:
+       {
+               //check if EndCallTimer is running, then cancel it
+               if(__pEndCallEventTimer != null)
+               {
+                       __pEndCallEventTimer->Cancel();
+               }
+               //make an outgoing call with given number
+               String* contactTxt = new (std::nothrow) String(*__pContactNumber);
+               //switch to dialing outgoing call form
+               ArrayList* pContact = new (std::nothrow) ArrayList(SingleObjectDeleter);
+               pContact->Construct();
+               pContact->Add(contactTxt);
+
+               //Check if dialing a call is possible
+               bool isSimInitialized = __pCallPresentor->CheckSimInitializationIsCompleted();
+               if (isSimInitialized)
+               {
+                       //Check if dialing an emergency call
+                       bool isEmergencyCall = __pCallPresentor->IsEmergencyNumber(*contactTxt, true);
+                       if (isEmergencyCall)
+                       {
+                               pSceneManager->GoForward( ForwardSceneTransition( IDSCN_SCENE_OUT_EMERGENCYCALL), pContact);
+                       }
+                       else
+                       {
+                               pSceneManager->GoForward( ForwardSceneTransition(IDSCN_SCENE_OUTCALL), pContact);
+                       }
+               }
+               else
+               {
+                       //Show error message Popup
+                       HandleTelephonyError(ERROR_CODE_SIM_INITIALIZATION_FAILED);
+               }
+       }
+       break;
+
+       case IDA_VIDEO_CALL:
+               //Make Video Call
+               break;
+
+       case IDA_MESSAGE:
+       {
+               if (__isMsgAppControlLaunched == true)
+               {
+                       //AppControl already launched.
+                       return;
+               }
+               //launch message AppControl
+               __isMsgAppControlLaunched = true;
+               result r = E_SUCCESS;
+               HashMap extraData;
+               extraData.Construct();
+
+               extraData.Add(new (std::nothrow) String(MESSAGE_TYPE), new (std::nothrow) String(MESSAGE_SMS_TYPE));
+               extraData.Add(new (std::nothrow) String(MESSAGE_TO), new (std::nothrow) String(*__pContactNumber));
+
+               AppControl* pAc = AppManager::FindAppControlN(PROVIDER_ID_MESSAGE, OPERATION_ID_COMPOSE);
+               if (pAc != null)
+               {
+                       r = pAc->Start(null, null, &extraData, this);
+                       if(r != E_SUCCESS)
+                       {
+                               //AppControl request failed, reset flag.
+                               __isMsgAppControlLaunched = false;
+                       }
+                       else if (r == E_SUCCESS && __pEndCallEventTimer != null)
+                       {
+                               //cancel EndCallTimer, if AppControl request was successful.
+                               __pEndCallEventTimer->Cancel();
+                       }
+                       delete pAc;
+               }
+
+               extraData.RemoveAll(true);
+       }
+       break;
+
+       case IDA_ADD_TO_CONTACTS:
+       {
+               if(__isContactAppControlLaunched == true)
+               {
+                       //AppControl already launched.
+                       AppLogDebug("__isContactAppControlLaunched == true");
+                       return;
+               }
+               HandleAddToContacts();
+       }
+       break;
+
+       default:
+               break;
+       }
+}
+
+void
+EndCallForm::HandleAddToContacts(void)
+{
+       AppLogDebug("Enter");
+       //Launch Contact AppControl
+       __isContactAppControlLaunched = true;
+       Contact* pContact = __pCallPresentor->GetContactN(*__pContactNumber);
+       AppControl* pAc = null;
+       result r = E_SUCCESS;
+       HashMap extraData;
+       extraData.Construct();
+
+       if (pContact != null)
+       {
+               AppLogDebug("View Contact");
+               //View Contact
+               String idVal;
+               idVal.Append(pContact->GetRecordId());
+               extraData.Add(new (std::nothrow) String(CONTACTS_VIEW_TYPE), new (std::nothrow) String(CONTACTS_VIEW_TYPE_CONTACT));
+               extraData.Add(new (std::nothrow) String(CONTACTS_ID_KEY), new (std::nothrow) String(idVal));
+                pAc = AppManager::FindAppControlN(PROVIDER_ID_CONTACTS, OPERATION_ID_VIEW);
+
+       }
+       else
+       {
+               AppLogDebug("Add Contact");
+               extraData.Add(new (std::nothrow) String(INPUT_TYPE_PHONE), new (std::nothrow) String(*__pContactNumber));
+               pAc = AppManager::FindAppControlN(PROVIDER_ID_CONTACTS, OPERATION_ID_ADD);
+
+       }
+       if (pAc != null)
+       {
+               r = pAc->Start(null, null, &extraData, this);
+               if(r != E_SUCCESS)
+               {
+                       //AppControl request failed, reset flag.
+                       __isContactAppControlLaunched = false;
+               }
+               else if (r == E_SUCCESS && __pEndCallEventTimer != null)
+               {
+                       //cancel EndCallTimer, if AppControl request was success.
+                       __pEndCallEventTimer->Cancel();
+               }
+               delete pAc;
+       }
+       else
+       {
+               __isContactAppControlLaunched = false;
+       }
+       extraData.RemoveAll(true);
+}
+
+void
+EndCallForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& currentSceneId, IList* pArgs)
+{
+       //set itself as listener
+       __pCallPresentor->SetTelEventListener(this);
+       //listen to Foreground events
+       CallApp* pPhoneApp = static_cast<CallApp*>(CallApp::GetInstance());
+       pPhoneApp->AddAppStateChangeListener(*this);
+       __isMsgAppControlLaunched = false;
+       __isContactAppControlLaunched = false;
+
+       switch (__formType)
+       {
+       case FORMTYPE_ENDCALL:
+       {
+               //fetch ended call details
+               CallInfo* pEndCall = static_cast<CallInfo*>(pArgs->GetAt(0));
+
+               //contact number
+               __pContactNumber = new (std::nothrow) String();
+               if(pEndCall->GetContactNumber().IsEmpty() == false)
+               {
+                       __pContactNumber->Append(pEndCall->GetContactNumber());
+               }
+               else
+               {
+                       __pContactNumber->Append(AppUtility::GetResourceString(IDS_NUMBER_UNKNOWN));
+               }
+
+               //Fetch & show contact person details
+               ShowPersonDetails(*__pContactNumber, IDC_CALLER1_LABEL, IDC_CALLER1_BIGPHOTO_LABEL,pEndCall);
+               //If call is hidden means contact number is empty,
+               //or if call is from known number(i.e present in contacts db), Then do NOT show "Add to Contact" button.
+               if (pEndCall->GetContactInfo() != null || pEndCall->GetContactNumber().IsEmpty() == true)
+               {
+                       SetContactButtonState(false);
+               }
+               else
+               {
+                       SetContactButtonState(true);
+               }
+
+               //Check if call is Emergency call or Hidden call,
+               //then disable all button in Call button panel.
+               if (pEndCall->IsEmergency() == true || pEndCall->GetContactNumber().IsEmpty() == true)
+               {
+                       __pCallButtonsPanel->SetEndCallPanelState(false);
+               }
+               else
+               {
+                       __pCallButtonsPanel->SetEndCallPanelState(true);
+               }
+       }
+       break;
+
+       default:
+               break;
+       }
+
+       if (__pEndCallEventTimer)
+       {
+               __pEndCallEventTimer->Start(IDI_APP_END_TIMER);
+       }
+
+       if (pArgs)
+       {
+               pArgs->RemoveAll();
+               delete pArgs;
+               pArgs = null;
+       }
+}
+
+void
+EndCallForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId)
+{
+       if (__pEndCallEventTimer != null)
+       {
+               __pEndCallEventTimer->Cancel();
+       }
+       if (__pContactNumber)
+       {
+               delete __pContactNumber;
+               __pContactNumber = null;
+       }
+       if (__pSmallPhotoLabel != null)
+       {
+               __pSmallPhotoLabel->SetShowState(false);
+       }
+       //remove itself as listener
+       CallApp* pPhoneApp = static_cast<CallApp*>(CallApp::GetInstance());
+       pPhoneApp->RemoveAppStateChangeListener(*this);
+}
+
+result
+EndCallForm::OnDraw(void)
+{
+       return E_SUCCESS;
+}
+
+void
+EndCallForm::SetContactButtonState(bool showState)
+{
+       __pCallButtonsPanel->SetViewContactButtonStatus(showState);
+       __isContactPresent = !showState;
+}
+
+bool
+EndCallForm::IsContactPresent(void)
+{
+       return __isContactPresent;
+}
+
+
+void
+EndCallForm::ShowPhoneNumber(const String& phoneNumber, const String& lblName)
+{
+       String formattedNumber = phoneNumber;
+       Label* pContactLbl = static_cast<Label*>(GetControl(lblName));
+       pContactLbl->SetText(formattedNumber);
+}
+
+void
+EndCallForm::ShowPersonDetails(const String& phoneNumber, const String& nameLblName, const String& photoLblName, CallInfo* pCallInfo)
+{
+       //show phone number
+       ShowPhoneNumber(phoneNumber, IDC_NUMBER1_LABEL);
+
+       Label* pNameLbl = static_cast<Label*>(GetControl(nameLblName));
+       Label* pPhotoLbl = static_cast<Label*>(GetControl(photoLblName));
+
+       //fetch contact details based on phone number
+       String* pDisplayName = pCallInfo->FetchCallerNameN();
+       Bitmap* pPhotoBitmap = pCallInfo->FetchCallerPhotoN();
+
+       //passing an empty string to SetText fails in label,
+       //if previously valid text has been set
+       if (pDisplayName != null && pDisplayName->IsEmpty() == true && pNameLbl->GetText().IsEmpty() == false)
+       {
+               pDisplayName->Append(L" ");
+       }
+
+       // show display name on name Label
+       if (pDisplayName != null)
+       {
+               pNameLbl->SetText(*pDisplayName);
+       }
+
+       // If record not found or no photo id present for user,
+       //fetch default bitmap.
+       if (pPhotoBitmap != null)
+       {
+               if(pPhotoBitmap->GetHeight() <= H_SMALL_PHOTO
+                               && pPhotoBitmap->GetWidth() <= W_SMALL_PHOTO)
+               {
+                       ShowThumbnailImage(pPhotoBitmap,photoLblName);
+               }
+               else
+               {
+                       Canvas* pCanvas = new (std::nothrow) Canvas;
+                       Rectangle canvasRect(Rectangle(0, 0, pPhotoLbl->GetBounds().width, pPhotoLbl->GetBounds().height));
+                       pCanvas->Construct(canvasRect);
+                       //draw the contact bitmap
+                       pCanvas->DrawBitmap(canvasRect,*pPhotoBitmap);
+                       Bitmap* pNewPhotoId = new Bitmap();
+                       pNewPhotoId->Construct(*pCanvas, pCanvas->GetBounds());
+                       delete pCanvas;
+
+                       pPhotoLbl->SetBackgroundBitmap(*pNewPhotoId);
+                       pPhotoLbl->Invalidate(true);
+                       delete pNewPhotoId;
+               }
+       }
+       else
+       {
+               //Set Default Photo
+               Bitmap* pDefaultPhoto = AppUtility::GetBitmapFromResourcesN(IDB_END_CALL_DEFAULT_ICON,W_PHOTO_LABEL,H_PHOTO_LABEL);
+               if (pDefaultPhoto != null)
+               {
+                       pPhotoLbl->SetBackgroundBitmap(*pDefaultPhoto);
+                       pPhotoLbl->Invalidate(true);
+                       delete pDefaultPhoto;
+               }
+       }
+       RequestRedraw(true);
+       //free resources
+       if (pDisplayName)
+       {
+               delete pDisplayName;
+               pDisplayName = null;
+       }
+       if (pPhotoBitmap)
+       {
+               delete pPhotoBitmap;
+               pPhotoBitmap = null;
+       }
+}
+
+void
+EndCallForm::ShowThumbnailImage(const Bitmap* pPhotoId,const String& photoLabel)
+{
+       Label* pPhotoLbl = static_cast<Label*>(GetControl(photoLabel));
+
+       if (pPhotoLbl != null && pPhotoId != null)
+       {
+               Canvas* pCanvas = new (std::nothrow) Canvas;
+               Bitmap* pBackground = AppUtility::GetBitmapFromResourcesN(IDB_CALL_THUMBNAIL_BACKGROUND,W_CALL_THUMBNAIL,H_CALL_THUMBNAIL);
+               Bitmap* pShadow = AppUtility::GetBitmapFromResourcesN(IDB_CALL_THUMBNAIL_SHADOW,W_CALL_THUMBNAIL_SHADOW,H_CALL_THUMBNAIL_SHADOW);
+               Rectangle canvasRect(Rectangle(0, 0, pPhotoLbl->GetBounds().width, pPhotoLbl->GetBounds().height));
+               pCanvas->Construct(canvasRect);
+               //draw the back ground
+               pCanvas->DrawBitmap(canvasRect,*pBackground);
+               //draw shadow (to be enabled after correct shadow image is provided )
+               //pCanvas->DrawBitmap(Rectangle((pPhotoLbl->GetBounds().width/2)-(W_CALL_THUMBNAIL_SHADOW/2),
+                       //      (pPhotoLbl->GetBounds().height/2)-(H_CALL_THUMBNAIL_SHADOW/2),W_CALL_THUMBNAIL_SHADOW,H_CALL_THUMBNAIL_SHADOW),*pShadow);
+               //draw the contact bitmap
+               pCanvas->DrawBitmap(Rectangle((pPhotoLbl->GetBounds().width/2)-(W_SMALL_PHOTO/2),
+                               (pPhotoLbl->GetBounds().height/2)-(H_SMALL_PHOTO/2),W_SMALL_PHOTO,H_SMALL_PHOTO),*pPhotoId);
+               Bitmap* pNewPhotoId = new Bitmap();
+               pNewPhotoId->Construct(*pCanvas, pCanvas->GetBounds());
+               delete pCanvas;
+
+               pPhotoLbl->SetBackgroundBitmap(*pNewPhotoId);
+               pPhotoLbl->Invalidate(true);
+               delete pNewPhotoId;
+               delete pBackground;
+               delete pShadow;
+       }
+
+}
+
+void
+EndCallForm::ShowCallersPhotoThumbnail(const Bitmap& pPhotoId)
+{
+       if (__pSmallPhotoLabel != null)
+       {
+               RemoveControl(*__pSmallPhotoLabel);
+               __pSmallPhotoLabel = null;
+       }
+       //Draw Small Photo and show on small photo label
+       __pSmallPhotoLabel  = new (std::nothrow) Label();//static_cast<Label*>(GetControl(IDC_SMALL_PHOTO_LABEL));
+       __pSmallPhotoLabel->Construct(Rectangle(X_PHOTO_LBL, Y_PHOTO_LBL, W_PHOTO_LBL, H_PHOTO_LBL), L"");
+       __pSmallPhotoLabel->SetBackgroundColor(Color(0,0,0));
+       __pSmallPhotoLabel->SetBackgroundBitmap(pPhotoId);
+       // Add a Label to the Form
+       AddControl(*__pSmallPhotoLabel);
+       __pSmallPhotoLabel->Invalidate(true);
+}
+
+void
+EndCallForm::OnTimerExpired(Tizen::Base::Runtime::Timer& timer)
+{
+       //goto initial scene or close application, since this was last active call.
+       HandleLastCallCompletion();
+}
+
+void
+EndCallForm::OnAppControlCompleteResponseReceived(const AppId& appId, const String& operationId, AppCtrlResult appControlResult, const IMap* pExtraData)
+{
+       if (__isMsgAppControlLaunched == true)
+       {
+               //Message AppControl request completed.
+               __isMsgAppControlLaunched = false;
+       }
+       //AppControl completed, goto initial scene if present
+       //else exit.
+       HandleLastCallCompletion();
+}
+
+void
+EndCallForm::HandleLastCallCompletion(void)
+{
+
+       CallApp* pPhoneApp = (static_cast<CallApp*>(UiApp::GetInstance()));
+       pPhoneApp->Terminate();
+
+}
+
+void
+EndCallForm::OnForeground(void)
+{
+       AppLogDebug("Enter");
+       //If Contact app control was launched
+       //as we do not know if it success or failed.
+       if(__isContactAppControlLaunched == true)
+       {
+               CallApp* pPhoneApp = (static_cast<CallApp*>(UiApp::GetInstance()));
+               pPhoneApp->Terminate();
+       }
+       __isContactAppControlLaunched = false;
+       AppLogDebug("Exit");
+}
+
+void
+EndCallForm::OnBackground(void)
+{
+       AppLogDebug("Enter");
+}
+
+void
+EndCallForm::OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus)
+{
+       if (__pCallButtonsPanel != null)
+       {
+               //update position of call buttons panel
+               Label* pKeysBgLbl = static_cast<Label*>(GetControl(IDC_KEY_BG_LABEL, true));
+               __pCallButtonsPanel->SetBounds(pKeysBgLbl->GetBounds());
+               //bring button on top
+               __pCallButtonsPanel->SetButtonPosition();
+               RelativeLayout* pRelativeLayout = dynamic_cast<RelativeLayout*>(GetPortraitLayoutN());
+               if (pRelativeLayout != null)
+               {
+                       pRelativeLayout->SetRelation(*__pCallButtonsPanel, *pKeysBgLbl, RECT_EDGE_RELATION_TOP_TO_TOP);
+               }
+               pRelativeLayout = dynamic_cast<RelativeLayout*>(GetLandscapeLayoutN());
+               if (pRelativeLayout != null)
+               {
+                       pRelativeLayout->SetRelation(*__pCallButtonsPanel, *pKeysBgLbl, RECT_EDGE_RELATION_LEFT_TO_LEFT);
+                       pRelativeLayout->SetRelation(*__pCallButtonsPanel, *this, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
+               }
+       }
+}
diff --git a/src/CallErrorMsgPopup.cpp b/src/CallErrorMsgPopup.cpp
new file mode 100644 (file)
index 0000000..4434c9f
--- /dev/null
@@ -0,0 +1,242 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file    CallErrorMsgPopup.cpp
+ * @brief      Error message pop class
+ */
+#include <FGraphics.h>
+#include "CallAppUtility.h"
+#include "CallErrorMsgPopup.h"
+#include "CallTypes.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Graphics;
+using namespace Tizen::Base::Utility;
+using namespace Tizen::Base::Runtime;
+
+const int IDI_VERTICAL_LINE_SPACING = 20;
+const int W_ERROR_MSG_POPUP = 720;
+const int IDI_VERTICAL_MARGIN = 39;
+static const wchar_t* IDL_ERROR_MSG_POPUP = L"IDL_ERROR_MSG_POPUP";
+static const wchar_t* IDC_MSG_TEXTBOX = L"IDC_MSG_TEXTBOX";
+static const wchar_t* IDS_DIAL_ERROR_MSG = L"IDS_DIAL_ERROR_MSG";
+static const wchar_t* IDS_JOIN_FAILED_ERROR_MSG = L"IDS_JOIN_FAILED_ERROR_MSG";
+static const wchar_t* IDS_REJECT_FAILED_ERROR_MSG = L"IDS_REJECT_FAILED_ERROR_MSG";
+static const wchar_t* IDS_CALL_SWAP_ERROR_MSG = L"IDS_CALL_SWAP_ERROR_MSG";
+static const wchar_t* IDS_END_PARTICIPANT_ERROR_MSG = L"IDS_END_PARTICIPANT_ERROR_MSG";
+static const wchar_t* IDS_SPLIT_PARTICIPANT_ERROR_MSG = L"IDS_SPLIT_PARTICIPANT_ERROR_MSG";
+static const wchar_t* IDS_SIM_INIT_ERROR_MSG = L"IDS_SIM_INIT_ERROR_MSG";
+static const wchar_t* IDS_EMERGENCY_CALLS_ONLY_ERROR_MSG = L"IDS_EMERGENCY_CALLS_ONLY_ERROR_MSG";
+static const wchar_t* IDS_INVALID_ARGS_ERROR_MSG = L"IDS_INVALID_ARGS_ERROR_MSG";
+static const wchar_t* IDS_TAPI_INIT_ERROR_MSG = L"IDS_TAPI_INIT_ERROR_MSG";
+static const wchar_t* IDS_GENERAL_TAPI_ERROR_MSG = L"IDS_GENERAL_TAPI_ERROR_MSG";
+static const wchar_t* IDS_LONG_BARRING_PWD_ERROR_MSG = L"IDS_LONG_BARRING_PWD_ERROR_MSG";
+static const wchar_t* IDS_INVALID_NUMBER_ERROR_MSG = L"IDS_INVALID_NUMBER_ERROR_MSG";
+static const wchar_t* IDS_GENERAL_ERROR_MSG = L"IDS_GENERAL_ERROR_MSG";
+
+ErrorMsgPopup::ErrorMsgPopup(IPopupClosedEventListener* pEventListener)
+: __pEventListener(pEventListener)
+{
+       __pTimer = null;
+}
+
+ErrorMsgPopup::~ErrorMsgPopup(void)
+{
+       if (__pTimer)
+       {
+               __pTimer->Cancel();
+               delete __pTimer;
+               __pTimer = null;
+       }
+}
+
+void
+ErrorMsgPopup::ConstructPopup(int errorCode)
+{
+       Construct(IDL_ERROR_MSG_POPUP);
+       //Fetch error message
+       String msg = FetchErrorMessage(errorCode);
+
+       //Set text to Message box
+       TextBox* pMsgTxtBox = static_cast<TextBox*>(GetControl(IDC_MSG_TEXTBOX));
+       pMsgTxtBox->SetLineSpacing(1,1);
+       pMsgTxtBox->SetText(msg);
+       pMsgTxtBox->SetEnabled(false);
+       pMsgTxtBox->SetTextAlignment(ALIGNMENT_CENTER);
+
+       Rectangle msgTxtBoxRect = pMsgTxtBox->GetBounds();
+       //get no. of lines to show message
+       int noOfLines = pMsgTxtBox->GetLineCount();
+       pMsgTxtBox->SetSize(msgTxtBoxRect.width,((noOfLines * msgTxtBoxRect.height) + IDI_VERTICAL_LINE_SPACING));
+
+       Dimension popUpDimen = pMsgTxtBox->GetSize();
+       popUpDimen.width = W_ERROR_MSG_POPUP;
+       popUpDimen.height +=  (2 * IDI_VERTICAL_MARGIN);
+       SetSize(popUpDimen);
+
+       SetControlAlwaysOnTop(*pMsgTxtBox,true);
+       RelativeLayout* relPopUpLayout = static_cast<RelativeLayout*>(GetLayoutN());
+       if(relPopUpLayout != null)
+       {
+               // Set Relations between msgtextbox and Popup
+               relPopUpLayout->SetCenterAligned(*pMsgTxtBox, CENTER_ALIGN_HORIZONTAL);
+               relPopUpLayout->SetCenterAligned(*pMsgTxtBox, CENTER_ALIGN_VERTICAL);
+       }
+       //construct timer
+       __pTimer = new (std::nothrow) Timer();
+       __pTimer->Construct(*this);
+}
+
+void
+ErrorMsgPopup::ShowErrorMsgPopupN(int errorCode)
+{
+       //Construct the message popup
+       ConstructPopup(errorCode);
+       //Show popup message
+       ShowPopup();
+}
+
+void
+ErrorMsgPopup::ShowPopup(void)
+{
+       __popupModalResult = 0;
+       //start timer to show popup
+       __pTimer->Start(2000);
+       SetShowState(true);
+       Show();
+}
+
+void
+ErrorMsgPopup::OnTimerExpired(Tizen::Base::Runtime::Timer& timer)
+{
+       //Call default implementation of "Object.Equals()"
+       //returns true, if they are pointing to same address.
+       if (__pTimer->Equals(timer))
+       {
+               SetShowState(false);
+               //notify the listener
+               __pEventListener->HandlePopupClosed();
+       }
+}
+
+String
+ErrorMsgPopup::FetchErrorMessage(int errorCode)
+{
+       String msg(L"");
+       switch (errorCode)
+       {
+       case ERROR_NONE:
+               break;
+
+       case ERROR_DIAL_FAILED:
+       {
+               msg.Append(AppUtility::GetResourceString(IDS_DIAL_ERROR_MSG));
+       }
+       break;
+
+       case ERROR_JOIN_FAILED:
+       {
+               msg.Append(AppUtility::GetResourceString(IDS_JOIN_FAILED_ERROR_MSG));
+       }
+       break;
+
+       case ERROR_REJECT_FAILED:
+       {
+               msg.Append(AppUtility::GetResourceString(IDS_REJECT_FAILED_ERROR_MSG));
+       }
+       break;
+
+       case ERROR_SWAP_FAILED:
+       {
+               msg.Append(AppUtility::GetResourceString(IDS_CALL_SWAP_ERROR_MSG));
+       }
+       break;
+
+       case ERROR_END_FROM_CONFERENCE_FAILED:
+       {
+               msg.Append(AppUtility::GetResourceString(IDS_END_PARTICIPANT_ERROR_MSG));
+       }
+       break;
+
+       case ERROR_SPLIT_FROM_CONFERENCE_FAILED:
+       {
+               msg.Append(AppUtility::GetResourceString(IDS_SPLIT_PARTICIPANT_ERROR_MSG));
+       }
+       break;
+
+       case ERROR_CODE_SIM_INITIALIZATION_FAILED:
+       {
+               msg.Append(AppUtility::GetResourceString(IDS_SIM_INIT_ERROR_MSG));
+       }
+       break;
+
+       case ERROR_NOT_EMERGENCY_NUM:
+       {
+               msg.Append(AppUtility::GetResourceString(IDS_EMERGENCY_CALLS_ONLY_ERROR_MSG));
+       }
+       break;
+
+       case ERROR_INVALID_INPUT:
+       {
+               msg.Append(AppUtility::GetResourceString(IDS_INVALID_ARGS_ERROR_MSG));
+       }
+       break;
+
+       case ERROR_TAPI_INIT_FAILED:
+       {
+               msg.Append(AppUtility::GetResourceString(IDS_TAPI_INIT_ERROR_MSG));
+       }
+       break;
+
+       case ERROR_TAPI_ERROR:
+       {
+               msg.Append(AppUtility::GetResourceString(IDS_GENERAL_TAPI_ERROR_MSG));
+       }
+       break;
+
+       case ERROR_BARRING_PWD_TOO_LONG:
+       {
+               msg.Append(AppUtility::GetResourceString(IDS_LONG_BARRING_PWD_ERROR_MSG));
+       }
+       break;
+
+       case ERROR_INVALID_NUMBER:
+       {
+               msg.Append(AppUtility::GetResourceString(IDS_INVALID_NUMBER_ERROR_MSG));
+       }
+       break;
+
+       case ERROR_FLIGHT_MODE_SET:
+       {
+               msg.Append(AppUtility::GetResourceString(IDS_FLIGHT_MODE_ON));
+       }
+       break;
+
+       case ERROR_GENERAL:
+       default:
+       {
+               msg.Append(AppUtility::GetResourceString(IDS_GENERAL_ERROR_MSG));
+       }
+       break;
+       }
+
+       return msg;
+}
+
+
diff --git a/src/CallFormFactory.cpp b/src/CallFormFactory.cpp
new file mode 100644 (file)
index 0000000..c53ccaf
--- /dev/null
@@ -0,0 +1,129 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file    FormFactory.cpp
+ * @brief   Form factory class
+ */
+#include "CallPhoneFormFactory.h"
+#include "CallSceneRegister.h"
+//Call forms
+#include "CallIncomingCallForm.h"
+#include "CallActiveCallForm.h"
+#include "CallConfCallerListForm.h"
+#include "CallEndCallForm.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+
+
+
+FormFactory::FormFactory(void)
+{
+}
+
+FormFactory::~FormFactory(void)
+{
+}
+
+Form*
+FormFactory::CreateFormN(const String& formId, const SceneId& sceneId)
+{
+       Form* pNewForm = null;
+
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       AppAssert(pSceneManager != null);
+       pNewForm = CreateVoiceCallForm(formId, sceneId);
+       return pNewForm;
+}
+
+Form*
+FormFactory::CreateVoiceCallForm(const String& formId, const SceneId& sceneId)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       AppAssert(pSceneManager != null);
+
+       BaseForm* pNewForm = null;
+
+       if (formId == IDL_FORM_OUTCALL)
+       {
+               ActiveCallForm* pForm = new (std::nothrow) ActiveCallForm(FORMTYPE_OUTGOINGCALL);
+               pForm->Initialize();
+               pSceneManager->AddSceneEventListener(sceneId, *pForm);
+               pNewForm = pForm;
+       }
+       else if (formId == IDL_FORM_OUT_EMERGENCYCALL)
+       {
+               ActiveCallForm* pForm = new (std::nothrow) ActiveCallForm(FORMTYPE_EMERGENCYOUTGOINGCALL);
+               pForm->Initialize();
+               pSceneManager->AddSceneEventListener(sceneId, *pForm);
+               pNewForm = pForm;
+       }
+       else if (formId == IDL_FORM_ACTIVECALL)
+       {
+               ActiveCallForm* pForm = new (std::nothrow) ActiveCallForm(FORMTYPE_ACTIVECALL);
+               pForm->Initialize();
+               pSceneManager->AddSceneEventListener(sceneId, *pForm);
+               pNewForm = pForm;
+       }
+       else if (formId == IDL_FORM_ACTIVE_EMERGENCYCALL)
+       {
+               ActiveCallForm* pForm = new (std::nothrow) ActiveCallForm(FORMTYPE_EMERGENCYACTIVECALL);
+               pForm->Initialize();
+               pSceneManager->AddSceneEventListener(sceneId, *pForm);
+               pNewForm = pForm;
+       }
+       else if (formId == IDL_FORM_INCOMINGCALL)
+       {
+               IncomingCallForm* pForm = new (std::nothrow) IncomingCallForm();
+               pForm->Initialize();
+               pSceneManager->AddSceneEventListener(sceneId, *pForm);
+               pNewForm = pForm;
+       }
+       else if (formId == IDL_FORM_ENDCALL)
+       {
+               EndCallForm* pForm = new (std::nothrow) EndCallForm();
+               pForm->Initialize();
+               pSceneManager->AddSceneEventListener(sceneId, *pForm);
+               pNewForm = pForm;
+       }
+       else if (formId == IDL_FORM_CONFCALLLIST)
+       {
+               ConfCallerListForm* pForm = new (std::nothrow) ConfCallerListForm();
+               pForm->Initialize();
+               pSceneManager->AddSceneEventListener(sceneId, *pForm);
+               pNewForm = pForm;
+       }
+       else if (formId == IDL_FORM_MULTIPLEACTIVECALL)
+       {
+               ActiveCallForm* pForm = new (std::nothrow) ActiveCallForm(FORMTYPE_MULTIPLECALLS);
+               pForm->Initialize();
+               pSceneManager->AddSceneEventListener(sceneId, *pForm);
+               pNewForm = pForm;
+       }
+       else if (formId == IDL_FORM_CONFCALL)
+       {
+               ActiveCallForm* pForm = new (std::nothrow) ActiveCallForm(FORMTYPE_ACTIVECONFCALL);
+               pForm->Initialize();
+               pSceneManager->AddSceneEventListener(sceneId, *pForm);
+               pNewForm = pForm;
+       }
+
+       return pNewForm;
+}
+
+
diff --git a/src/CallIncomingCallForm.cpp b/src/CallIncomingCallForm.cpp
new file mode 100644 (file)
index 0000000..b731b03
--- /dev/null
@@ -0,0 +1,1551 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file    CallIncomingCallForm.cpp
+ * @brief      Incoming Call form implementation
+ */
+#include <FBaseColIList.h>
+#include <FMessaging.h>
+#include "CallIncomingCallForm.h"
+#include "CallAppUtility.h"
+#include "CallSettingsManager.h"
+#include "CallPresentationModel.h"
+#include "CallSceneRegister.h"
+#include "CallTypes.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Graphics;
+using namespace Tizen::Messaging;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Animations;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+
+//Constants
+const int W_DIAL_BITMAP = 100;
+const int H_DIAL_BITMAP = 100;
+const int W_CREATE_BITMAP = 56;
+const int H_CREATE_BITMAP = 56;
+const int X_CREATE_BITMAP = 8;
+const int Y_CREATE_BITMAP = 8;
+const int W_MESSAGE_BG_BITMAP = 720;
+const int H_MESSAGE_BG_BITMAP = 110;
+const int W_ARROW_BITMAP = 28;
+const int H_ARROW_BITMAP = 36;
+const int W_MESSAGE_BITMAP = 50;
+const int H_MESSAGE_BITMAP = 50;
+const int X_MESSAGE_BITMAP = 185;
+const int Y_MESSAGE_BITMAP = 50;
+const int MESSAGE_TEXT_X_MARGIN = 20;
+const int MESSAGE_TEXT_Y_MARGIN = 10;
+const int SEND_TEXT_X_MARGIN = 78;
+const int SEND_TEXT_Y_MARGIN = 20;
+const int SEND_BUTTON_ROUND_DIMENSION = 5;
+const int W_DIAL_LABEL = 188;
+const int H_DIAL_LABEL = 188;
+const int DIAL_ICON_X_OFFSET = 44;
+const int DIAL_ICON_Y_OFFSET = 44;
+const int REJECT_LABEL_X_OFFSET = 492;
+const int X_CALL_PANEL = 20;
+const int Y_CALL_PANEL = 110;
+const int H_CALL_PANEL = 188;
+const int Y_ARROW_LABEL = 79;
+const int W_ARROW_LABEL = 20;
+const int H_ARROW_LABEL = 32;
+const int VALID_TOUCH_X_OFFSET = 158;
+const int VALID_TOUCH_Y_OFFSET = 158;
+const int X_ARROW_LABEL_STARTPOS = 206; // 188 circle wodth , 18 GUI spec
+const int X_ARROW_REJECT_LABEL_STARTPOS = 454; // 700 width of panel - 20 offset - 188 circle width - 18 GUI spec - 20 width of image
+const int ARROW_LABEL_X_MARGIN = 48; //20 width of arrow and 28 GUI spec
+const int ACCEPT_LABEL_RELATIVE_POS = -384; //relative pos of accept labels right to reject labels left
+const int MAX_LIST_HEIGHT = 448;//678;
+const int H_REJECT_VIEW_FOOTER = 98;
+const int X_LIST_TEXT_ITEM = 16;
+const int W_LIST_TEXT_ITEM = 452;
+const int H_LIST_TEXT_ITEM = 111;
+const int X_SEND_TEXT_ITEM = 484;
+const int Y_SEND_TEXT_ITEM = 20;
+const int W_SEND_TEXT_ITEM = 220;
+const int H_SEND_TEXT_ITEM = 72;
+const int X_PHOTO_LBL = 166;
+const int Y_PHOTO_LBL = 232;
+const int W_PHOTO_LBL = 388;
+const int H_PHOTO_LBL = 388;
+const int W_PHOTO_LABEL = 720;
+const int H_PHOTO_LABEL = 720;
+const int COUNT_ARROW_ELEMENTS = 3;
+
+const unsigned int COLOR_SEND_BUTTON_PRESSED = Color32<130, 142, 150>::Value;
+const unsigned int COLOR_SEND_BUTTON_NORMAL = Color32<64, 156, 211>::Value;
+const unsigned int COLOR_SWIPE_PANEL = Color32<0, 0, 0, 255>::Value;
+const unsigned int COLOR_LIST_TEXT_NORMAL = Color32<0, 0, 0>::Value;
+const unsigned int COLOR_LIST_TEXT_PRESSED = Color32<249, 249, 249>::Value;
+
+const int FONT_SIZE_MSG_TXT = 44;
+
+static const wchar_t* IDL_INCOMING_CALL_FORM = L"IDL_INCOMING_CALL_FORM";
+static const wchar_t* IDB_REJECT_MESSAGE_BG = L"C01-1_Reject_message_bg.png";
+static const wchar_t* IDB_REJECT_MESSAGE_UP_ARROW = L"C01-1_Reject_message_arrow_01.png";
+static const wchar_t* IDB_REJECT_MESSAGE_DOWN_ARROW = L"C01-1_Reject_message_arrow_02.png";
+static const wchar_t* IDB_REJECT_MESSAGE_ICON = L"C01-1_icon_Reject_with_Message.png";
+static const wchar_t* IDB_ACCEPT_CIRCLE_ICON = L"C01-1_accept_left.png";
+static const wchar_t* IDB_REJECT_CIRCLE_ICON = L"C01-1_reject_right.png";
+static const wchar_t* IDB_CALL_ACCEPT_ICON = L"C01-1_accept_left_dial_answer.png";
+static const wchar_t* IDB_CALL_REJECT_ICON = L"C01-1_reject_right_dial_decline.png";
+static const wchar_t* IDB_ACCEPT_ARROW_ICON = L"C01-1_arrow_g.png";
+static const wchar_t* IDB_REJECT_ARROW_ICON = L"C01-1_arrow_r.png";
+static const wchar_t* IDB_CALL_BG = L"C01-1_calling_BG_01.png";
+static const wchar_t* IDC_REJECT_MESSAGE_BUTTON = L"IDC_REJECT_MESSAGE_BUTTON";
+static const wchar_t* IDC_REJECT_PANEL = L"IDC_REJECT_PANEL";
+static const wchar_t* IDC_REJECT_MESSAGE_CANCEL_BUTTON = L"IDC_REJECT_MESSAGE_CANCEL_BUTTON";
+static const wchar_t* IDC_MSG_TABLEVIEW = L"IDC_MSG_TABLEVIEW";
+static const wchar_t* IDC_CALLER_LABEL = L"IDC_CALLER_LABEL";
+static const wchar_t* IDC_NUMBER_LABEL = L"IDC_NUMBER_LABEL";
+static const wchar_t* IDC_BIG_PHOTO_LABEL = L"IDC_BIG_PHOTO_LABEL";
+const wchar_t* IDS_REJECT_MESSAGE_BTN = L"IDS_REJECT_MESSAGE_BTN";
+const wchar_t* IDS_LIST_SEND_BUTTON = L"IDS_LIST_SEND_BUTTON";
+const wchar_t* IDS_NO_MESSAGE_STR = L"IDS_NO_MESSAGE_STR";
+
+const wchar_t* IDI_FORM_VISUAL_ELE_NAME = L"FormVisEle";
+const wchar_t* IDI_PANEL_VISUAL_ELE_NAME = L"PanelVisEle";
+const wchar_t* IDI_ACCEPT_VISUAL_ELE_NAME = L"AcceptVisEle";
+const wchar_t* IDI_REJECT_VISUAL_ELE_NAME = L"RejectVisEle";
+const wchar_t* IDI_ACCEPT_ARROW_VISUAL_ELE_NAME = L"AcceptArrowVisEle";
+const wchar_t* IDI_REJECT_ARROW_VISUAL_ELE_NAME = L"RejectArrowVisEle";
+const wchar_t* IDI_REJECT_FINAL_VISUAL_ELE_NAME = L"RejectFinalVisEle";
+const wchar_t* IDI_ACCEPT_FINAL_VISUAL_ELE_NAME = L"AcceptFinalVisEle";
+
+class SmsListener
+       : public Object
+       , public ISmsListener
+{
+public:
+               void  OnSmsMessageSent(result r)
+               {
+               }
+};
+
+IncomingCallForm::IncomingCallForm(void)
+       : BaseForm(FORMTYPE_INCOMINGCALL)
+{
+       __pActiveContactNo = null;
+       __pRejectMessageList = null;
+       __incomingCallHandle = -1;
+       __isAnswerCallStarted = false;
+       __isRejectCallStarted = false;
+       __pAcceptArrowLabelsList = null;
+       __pRejectArrowLabelsList = null;
+       __pRejectCircle = null;
+       __pAcceptCircle = null;
+       __pAcceptDial = null;
+       __pRejectDial = null;
+       __pAcceptArrow = null;
+       __pRejectArrow = null;
+       __pAcceptLabel = null;
+       __pRejectLabel = null;
+       __pAcceptArrowLabel = null;
+       __pRejectArrowLabel = null;
+       __pCallHandlePanel = null;
+       __pAcceptVisElem = null;
+       __pRejectVisElem = null;
+       __pRejectFinalVisElem = null;
+       __pAcceptFinalVisElem = null;
+       __pAcceptArrowVisElem = null;
+       __pRejectArrowVisElem = null;
+       __pCallPresentor = null;
+       __pOptionPopup = null;
+       __pSmallPhotoLabel = null;
+}
+
+IncomingCallForm::~IncomingCallForm(void)
+{
+}
+
+void
+IncomingCallForm::Initialize(void)
+{
+       Construct(IDL_INCOMING_CALL_FORM);
+}
+
+result
+IncomingCallForm::OnInitializing(void)
+{
+       result r = E_SUCCESS;
+       Canvas* pCanvas = null;
+
+       InitializeFooter();
+
+
+       VisualElement* pFormVisElem = new (std::nothrow) VisualElement();
+       r = pFormVisElem->Construct();
+       pFormVisElem->SetBounds(FloatRectangle(GetClientAreaBounds().x, GetClientAreaBounds().y, GetClientAreaBounds().width, GetClientAreaBounds().height));
+       pFormVisElem->SetShowState(true);
+       pFormVisElem->SetOpacity(1.0f);
+       pFormVisElem->SetName(IDI_FORM_VISUAL_ELE_NAME);
+       GetVisualElement()->AttachChild(*pFormVisElem);
+       pCanvas = pFormVisElem->GetCanvasN();
+       if(pCanvas != null)
+       {
+               pCanvas->Clear();
+               pCanvas->SetBackgroundColor(COLOR_SWIPE_PANEL);
+               pCanvas->SetForegroundColor(COLOR_SWIPE_PANEL);
+               pCanvas->FillRectangle(COLOR_SWIPE_PANEL, Rectangle(GetClientAreaBounds().x, GetClientAreaBounds().y, GetClientAreaBounds().width, GetClientAreaBounds().height));
+               delete pCanvas;
+               pCanvas = null;
+       }
+       HideRejectPanel();
+
+       Button* pButtonRejectMessage = static_cast<Button*>(GetControl(IDC_REJECT_MESSAGE_BUTTON));
+       if (pButtonRejectMessage)
+       {
+               SetBitmapToRejectMessageButton(IDS_REJECT_MESSAGE_BTN,IDB_REJECT_MESSAGE_BG,
+                                                                          IDB_REJECT_MESSAGE_UP_ARROW, IDB_REJECT_MESSAGE_ICON, false, false);
+               SetBitmapToRejectMessageButton(IDS_REJECT_MESSAGE_BTN,IDB_REJECT_MESSAGE_BG,
+                                                                          IDB_REJECT_MESSAGE_UP_ARROW, IDB_REJECT_MESSAGE_ICON, false, true);
+               pButtonRejectMessage->SetActionId(IDA_SHOW_REJECT_CALL_MESSAGE_PANEL);
+               pButtonRejectMessage->AddActionEventListener(*this);
+       }
+
+       //Get Reject list from Settings Manager
+       IMapT<int,String>* pMsgMap = SettingsManager::GetInstance()->GetRejectMessageListN();
+       if(pMsgMap != null)
+       {
+               __pRejectMessageList = pMsgMap->GetValuesN();
+               delete pMsgMap;
+               pMsgMap = null;
+       }
+       InitializeTableView();
+
+       __pAcceptCircle = AppUtility::GetBitmapFromResourcesN(IDB_ACCEPT_CIRCLE_ICON, W_DIAL_LABEL, H_DIAL_LABEL);
+       __pRejectCircle = AppUtility::GetBitmapFromResourcesN(IDB_REJECT_CIRCLE_ICON, W_DIAL_LABEL, H_DIAL_LABEL);
+       __pAcceptDial = AppUtility::GetBitmapFromResourcesN(IDB_CALL_ACCEPT_ICON, W_DIAL_BITMAP, H_DIAL_BITMAP);
+       __pRejectDial = AppUtility::GetBitmapFromResourcesN(IDB_CALL_REJECT_ICON, W_DIAL_BITMAP, H_DIAL_BITMAP);
+       __pAcceptArrow = AppUtility::GetBitmapFromResourcesN(IDB_ACCEPT_ARROW_ICON, W_ARROW_LABEL, H_ARROW_LABEL);
+       __pRejectArrow = AppUtility::GetBitmapFromResourcesN(IDB_REJECT_ARROW_ICON, W_ARROW_LABEL, H_ARROW_LABEL);
+
+
+       if(__pRejectDial == null)
+       {
+               AppLogDebug("Null");
+       }
+       //Panel for showing accept and reject call buttons.
+       Label* pPhotoLbl = static_cast<Label*>(GetControl(IDC_BIG_PHOTO_LABEL, true));
+        int yPos = pPhotoLbl->GetX()+pPhotoLbl->GetHeight()+ Y_CALL_PANEL;
+
+       __pCallHandlePanel = new (std::nothrow) Panel();
+       r = __pCallHandlePanel->Construct(Rectangle(X_CALL_PANEL, yPos, GetClientAreaBounds().width - X_CALL_PANEL, H_CALL_PANEL), GROUP_STYLE_NONE);
+       __pCallHandlePanel->AddTouchEventListener(*this);
+       AddControl(*__pCallHandlePanel);
+       __pCallHandlePanel->SetBackgroundColor(COLOR_SWIPE_PANEL);
+       VisualElement* pCallPanelVisElem = new (std::nothrow) VisualElement();
+       r = pCallPanelVisElem->Construct();
+       pCallPanelVisElem->SetBounds(FloatRectangle(X_CALL_PANEL, yPos, GetClientAreaBounds().width, H_CALL_PANEL));
+       pCallPanelVisElem->SetShowState(true);
+       pCallPanelVisElem->SetOpacity(1.0f);
+       pCallPanelVisElem->SetName(IDI_PANEL_VISUAL_ELE_NAME);
+       __pCallHandlePanel->GetVisualElement()->AttachChild(*pCallPanelVisElem);
+       pCanvas = pCallPanelVisElem->GetCanvasN();
+       if(pCanvas != null)
+       {
+               pCanvas->SetBackgroundColor(COLOR_SWIPE_PANEL);
+               pCanvas->Clear();
+               pCanvas->SetBackgroundColor(COLOR_SWIPE_PANEL);
+               pCanvas->SetForegroundColor(COLOR_SWIPE_PANEL);
+               pCanvas->FillRectangle(COLOR_SWIPE_PANEL, Rectangle(X_CALL_PANEL, yPos, GetClientAreaBounds().width, H_CALL_PANEL));
+               delete pCanvas;
+               pCanvas = null;
+       }
+       //Lock Label for animation
+       __pAcceptLabel = new (std::nothrow) Label();
+       r = __pAcceptLabel->Construct(Rectangle(0, 0, W_DIAL_LABEL, H_DIAL_LABEL), L"");
+       __pAcceptLabel->SetBackgroundColor(COLOR_SWIPE_PANEL);
+       __pAcceptLabel->AddTouchEventListener(*this);
+       __pCallHandlePanel->AddControl(*__pAcceptLabel);
+       //left dial icon
+       __pAcceptVisElem = new (std::nothrow) VisualElement();
+       r = __pAcceptVisElem->Construct();
+       __pAcceptVisElem->SetBounds(FloatRectangle(0, 0, W_DIAL_LABEL, H_DIAL_LABEL));
+       __pAcceptVisElem->SetShowState(true);
+       __pAcceptVisElem->SetOpacity(1.0f);
+       __pAcceptVisElem->SetName(IDI_ACCEPT_VISUAL_ELE_NAME);
+       __pAcceptLabel->GetVisualElement()->AttachChild(*__pAcceptVisElem);
+       pCanvas = __pAcceptVisElem->GetCanvasN();
+       if(pCanvas != null)
+       {
+               pCanvas->SetBackgroundColor(COLOR_SWIPE_PANEL);
+               pCanvas->Clear();
+               pCanvas->SetBackgroundColor(COLOR_SWIPE_PANEL);
+               pCanvas->SetForegroundColor(COLOR_SWIPE_PANEL);
+               pCanvas->FillRectangle(COLOR_SWIPE_PANEL, Rectangle(0, 0, W_DIAL_LABEL, H_DIAL_LABEL));
+               pCanvas->DrawBitmap(Rectangle(0, 0, W_DIAL_LABEL, H_DIAL_LABEL), *__pAcceptCircle);
+               pCanvas->DrawBitmap(Rectangle(DIAL_ICON_X_OFFSET, DIAL_ICON_Y_OFFSET, W_DIAL_BITMAP, H_DIAL_BITMAP), *__pAcceptDial);
+               delete pCanvas;
+               pCanvas = null;
+       }
+       //UnLock Label for animation
+       __pRejectLabel = new (std::nothrow) Label();
+       r = __pRejectLabel->Construct(Rectangle(REJECT_LABEL_X_OFFSET, 0, W_DIAL_LABEL, H_DIAL_LABEL), L"");
+       __pRejectLabel->AddTouchEventListener(*this);
+       __pCallHandlePanel->AddControl(*__pRejectLabel);
+       __pRejectLabel->SetBackgroundColor(COLOR_SWIPE_PANEL);
+       SetControlAlwaysAtBottom(*__pCallHandlePanel, true);
+
+       //Right reject icon
+       __pRejectVisElem = new (std::nothrow) VisualElement();
+       r = __pRejectVisElem->Construct();
+       __pRejectVisElem->SetBounds(FloatRectangle(0, 0, W_DIAL_LABEL, H_DIAL_LABEL));
+       __pRejectVisElem->SetShowState(true);
+       __pRejectVisElem->SetOpacity(1.00f);
+       __pRejectVisElem->SetName(IDI_REJECT_VISUAL_ELE_NAME);
+       __pRejectLabel->GetVisualElement()->AttachChild(*__pRejectVisElem);
+       pCanvas = __pRejectVisElem->GetCanvasN();
+       if(pCanvas != null)
+       {
+               pCanvas->SetBackgroundColor(COLOR_SWIPE_PANEL);
+               pCanvas->Clear();
+               pCanvas->SetBackgroundColor(COLOR_SWIPE_PANEL);
+               pCanvas->SetForegroundColor(COLOR_SWIPE_PANEL);
+               pCanvas->FillRectangle(COLOR_SWIPE_PANEL, Rectangle(0, 0, W_DIAL_LABEL, H_DIAL_LABEL));
+               pCanvas->DrawBitmap(Rectangle(0, 0, W_DIAL_LABEL, H_DIAL_LABEL), *__pRejectCircle);
+               pCanvas->DrawBitmap(Rectangle(DIAL_ICON_X_OFFSET, DIAL_ICON_Y_OFFSET, W_DIAL_BITMAP, H_DIAL_BITMAP), *__pRejectDial);
+               delete pCanvas;
+               pCanvas = null;
+       }
+
+       //! Constructs an array list to store the unlock labels
+       __pAcceptArrowLabelsList = new (std::nothrow) ArrayList();
+       r = __pAcceptArrowLabelsList->Construct();
+
+       //! Constructs the Unlock Labels with the bitmap as background, adds the touch event Listener and adds them to the panel.
+       int x = X_ARROW_LABEL_STARTPOS;
+       for (int index = 0; index < COUNT_ARROW_ELEMENTS; index++)
+       {
+               __pAcceptArrowLabel = new (std::nothrow) Label();
+               r = __pAcceptArrowLabel->Construct(Rectangle(x, Y_ARROW_LABEL, W_ARROW_LABEL, H_ARROW_LABEL), L"");
+               __pAcceptArrowLabel->AddTouchEventListener(*this);
+               __pCallHandlePanel->AddControl(*__pAcceptArrowLabel);
+               __pAcceptArrowLabelsList->Add(*__pAcceptArrowLabel);
+               __pAcceptArrowVisElem = new (std::nothrow) VisualElement();
+               r = __pAcceptArrowVisElem->Construct();
+               __pAcceptArrowVisElem->SetBounds(FloatRectangle(0, 0, W_ARROW_LABEL, H_ARROW_LABEL));
+               __pAcceptArrowVisElem->SetShowState(true);
+               __pAcceptArrowVisElem->SetOpacity(0.0f);
+               String VisualEleName(IDI_ACCEPT_ARROW_VISUAL_ELE_NAME);
+               VisualEleName.Append(index);
+               __pAcceptArrowVisElem->SetName(VisualEleName);
+               __pAcceptArrowLabel->GetVisualElement()->AttachChild(*__pAcceptArrowVisElem);
+               pCanvas = __pAcceptArrowVisElem->GetCanvasN();
+               if(pCanvas != null)
+               {
+                       pCanvas->SetBackgroundColor(COLOR_SWIPE_PANEL);
+                       pCanvas->Clear();
+                       pCanvas->SetForegroundColor(COLOR_SWIPE_PANEL);
+                       pCanvas->SetForegroundColor(COLOR_SWIPE_PANEL);
+                       pCanvas->DrawRectangle(Rectangle(0, 0, W_ARROW_LABEL, H_ARROW_LABEL));
+                       pCanvas->FillRectangle(COLOR_SWIPE_PANEL, Rectangle(0, 0, W_ARROW_LABEL, H_ARROW_LABEL));
+                       pCanvas->DrawBitmap(Rectangle(0, 0, W_ARROW_LABEL, H_ARROW_LABEL), *__pAcceptArrow);
+                       delete pCanvas;
+                       pCanvas = null;
+               }
+               x += ARROW_LABEL_X_MARGIN;
+       }
+       //! Constructs an array list to store the unlock labels
+       __pRejectArrowLabelsList = new (std::nothrow) ArrayList();
+       r = __pRejectArrowLabelsList->Construct();
+
+       x = X_ARROW_REJECT_LABEL_STARTPOS;
+       for (int index = 0; index < COUNT_ARROW_ELEMENTS; index++)
+       {
+               __pRejectArrowLabel = new (std::nothrow) Label();
+               r = __pRejectArrowLabel->Construct(Rectangle(x, Y_ARROW_LABEL, W_ARROW_LABEL, H_ARROW_LABEL), L"");
+               __pRejectArrowLabel->AddTouchEventListener(*this);
+               __pCallHandlePanel->AddControl(*__pRejectArrowLabel);
+               __pRejectArrowLabelsList->Add(*__pRejectArrowLabel);
+               __pRejectArrowVisElem = new (std::nothrow) VisualElement();
+               r = __pRejectArrowVisElem->Construct();
+               __pRejectArrowVisElem->SetBounds(FloatRectangle(0, 0, W_ARROW_LABEL, H_ARROW_LABEL));
+               __pRejectArrowVisElem->SetShowState(true);
+               __pRejectArrowVisElem->SetOpacity(0.0f);
+               String VisualEleName(IDI_REJECT_ARROW_VISUAL_ELE_NAME);
+               VisualEleName.Append(index);
+               __pRejectArrowVisElem->SetName(VisualEleName);
+               __pRejectArrowLabel->GetVisualElement()->AttachChild(*__pRejectArrowVisElem);
+               pCanvas = __pRejectArrowVisElem->GetCanvasN();
+               if(pCanvas != null)
+               {
+                       pCanvas->SetBackgroundColor(COLOR_SWIPE_PANEL);
+                       pCanvas->Clear();
+                       pCanvas->SetBackgroundColor(COLOR_SWIPE_PANEL);
+                       pCanvas->SetForegroundColor(COLOR_SWIPE_PANEL);
+                       pCanvas->FillRectangle(COLOR_SWIPE_PANEL, Rectangle(0, 0, W_ARROW_LABEL, H_ARROW_LABEL));
+                       pCanvas->DrawBitmap(Rectangle(0, 0, W_ARROW_LABEL, H_ARROW_LABEL), *__pRejectArrow);
+                       delete pCanvas;
+                       pCanvas = null;
+               }
+               x -= ARROW_LABEL_X_MARGIN;
+       }
+
+
+       return r;
+}
+
+void
+IncomingCallForm::InitializeFooter(void)
+{
+       Footer* pFooter = GetFooter();
+       FooterItem footerItemCreate;
+
+       SetFormBackEventListener(this);
+       if(pFooter != null)
+       {
+               pFooter->SetStyle(FOOTER_STYLE_BUTTON_TEXT);
+               pFooter->AddActionEventListener(*this);
+
+               footerItemCreate.Construct(IDA_CREATE_REJECT_CALL_MESSAGE);
+               footerItemCreate.SetText(AppUtility::GetResourceString(IDS_REJECT_MESSAGE_CREATE));
+               pFooter->AddItem(footerItemCreate);
+               pFooter->SetBackButton();
+               pFooter->SetShowState(false);
+       }
+}
+
+void
+IncomingCallForm::ShowRejectMessageFooter(void)
+{
+       Footer* pFooter = GetFooter();
+       if(pFooter != null)
+       {
+               pFooter->SetShowState(true);
+
+       }
+}
+
+void
+IncomingCallForm::HideRejectMessageFooter(void)
+{
+       Footer* pFooter = GetFooter();
+       if(pFooter != null)
+       {
+               pFooter->SetShowState(false);
+       }
+}
+
+result
+IncomingCallForm::OnTerminating(void)
+{
+       result r = E_SUCCESS;
+
+       if (__pRejectMessageList != null)
+       {
+               delete __pRejectMessageList;
+               __pRejectMessageList = null;
+       }
+       if (__pActiveContactNo != null)
+       {
+               delete __pActiveContactNo;
+               __pActiveContactNo = null;
+       }
+       __incomingCallHandle = -1;
+       __pCallPresentor = null;
+
+       /* Deleting fails in A4RC* SDK. Remove if not necessary
+       if (__pAcceptVisElem != null)
+       {
+               __pAcceptVisElem->Destroy();
+               __pAcceptVisElem = null;
+       }
+
+       if (__pRejectVisElem != null)
+       {
+               __pRejectVisElem->Destroy();
+               __pRejectVisElem = null;
+       }
+
+       if (__pRejectFinalVisElem != null)
+       {
+               __pRejectFinalVisElem->Destroy();
+               __pRejectFinalVisElem = null;
+       }
+
+       if (__pAcceptFinalVisElem != null)
+       {
+               __pAcceptFinalVisElem->Destroy();
+               __pAcceptFinalVisElem = null;
+       }
+
+       for (int i = 0; i < 7; i++)
+       {
+               __pRejectArrowLabel = static_cast<Label*>(__pRejectArrowLabelsList->GetAt(i));
+               __pRejectArrowVisElem = __pRejectArrowLabel->GetVisualElement();
+               if (__pRejectArrowVisElem != null)
+               {
+                       __pRejectArrowVisElem->Destroy();
+                       __pRejectArrowVisElem = null;
+               }
+
+               __pAcceptArrowLabel = static_cast<Label*>(__pAcceptArrowLabelsList->GetAt(i));
+               __pAcceptArrowVisElem = __pAcceptArrowLabel->GetVisualElement();
+               if (__pAcceptArrowVisElem != null)
+               {
+                       __pAcceptArrowVisElem->Destroy();
+                       __pAcceptArrowVisElem = null;
+               }
+       }
+
+       if (__pAcceptArrowVisElem != null)
+       {
+               __pAcceptArrowVisElem = null;
+       }
+
+       if (__pRejectArrowVisElem != null)
+       {
+               __pRejectArrowVisElem = null;
+       }
+*/
+       if (__pAcceptArrowLabelsList != null)
+       {
+               __pAcceptArrowLabelsList->RemoveAll(false);
+               delete __pAcceptArrowLabelsList;
+               __pAcceptArrowLabelsList = null;
+       }
+
+       if (__pRejectArrowLabelsList != null)
+       {
+               __pRejectArrowLabelsList->RemoveAll(false);
+               delete __pRejectArrowLabelsList;
+               __pRejectArrowLabelsList = null;
+       }
+
+       if (__pRejectCircle != null)
+       {
+               delete __pRejectCircle;
+               __pRejectCircle = null;
+       }
+
+       if (__pAcceptCircle != null)
+       {
+               delete __pAcceptCircle;
+               __pAcceptCircle = null;
+       }
+
+       if (__pAcceptDial != null)
+       {
+               delete __pAcceptDial;
+               __pAcceptDial = null;
+       }
+
+       if (__pRejectDial != null)
+       {
+               delete __pRejectDial;
+               __pRejectDial = null;
+       }
+
+       if (__pAcceptArrow != null)
+       {
+               delete __pAcceptArrow;
+               __pAcceptArrow = null;
+       }
+
+       if (__pRejectArrow != null)
+       {
+               delete __pRejectArrow;
+               __pRejectArrow = null;
+       }
+       __pCallHandlePanel->RemoveTouchEventListener(*this);
+       __pAcceptLabel->RemoveTouchEventListener(*this);
+       __pRejectLabel->RemoveTouchEventListener(*this);
+       __pAcceptArrowLabel->RemoveTouchEventListener(*this);
+       __pRejectArrowLabel->RemoveTouchEventListener(*this);
+       __pAcceptLabel = null;
+       __pRejectLabel = null;
+       __pAcceptArrowLabel = null;
+       __pRejectArrowLabel = null;
+       __pCallHandlePanel = null;
+       return r;
+}
+
+void
+IncomingCallForm::OnActionPerformed(const Control& source, int actionId)
+{
+       switch (actionId)
+       {
+       case IDA_SHOW_REJECT_CALL_MESSAGE_PANEL: // applicable in all form states
+       {
+               Panel* pKeysPanel = static_cast<Panel*>(GetControl(IDC_REJECT_PANEL));
+               if (pKeysPanel)
+               {
+                       pKeysPanel->SetShowState(true);
+                       TableView* pMessageList = static_cast<TableView*>(pKeysPanel->GetControl(IDC_MSG_TABLEVIEW));
+                       Rectangle tmpRect = pMessageList->GetBounds();
+                       SetControlAlwaysOnTop(*pKeysPanel,true);
+
+                       //Set Height to Reject Message Panel
+                       int listHeight = H_LIST_NORMAL_MENU_ITEM; //If no messages
+                       if(__pRejectMessageList != null && __pRejectMessageList->GetCount() > 0)
+                       {
+                               listHeight = H_LIST_NORMAL_MENU_ITEM * (__pRejectMessageList->GetCount()); //multiply by number of items
+                       }
+                       if (listHeight > MAX_LIST_HEIGHT)
+                       {
+                               listHeight = MAX_LIST_HEIGHT;
+                       }
+
+                       pMessageList->SetBounds(tmpRect.x, tmpRect.y, tmpRect.width, listHeight);
+                       tmpRect = pKeysPanel->GetBounds();
+                       pKeysPanel->SetBounds(tmpRect.x, tmpRect.y, tmpRect.width, H_MESSAGE_BG_BITMAP /*+ H_REJECT_VIEW_FOOTER*/ + listHeight);
+
+                       Button* pButtonReject = static_cast<Button*>(pKeysPanel->GetControl(IDC_REJECT_MESSAGE_CANCEL_BUTTON));
+                       pButtonReject->SetActionId(IDA_CANCEL_REJECT_CALL_MESSAGE_PANEL);
+                       pButtonReject->AddActionEventListener(*this);
+                       pButtonReject->SetEnabled(true);
+                       pButtonReject->SetFocus();
+
+                       ShowRejectMessageFooter();
+
+               /*      pButtonReject = static_cast<Button*>(pKeysPanel->GetControl(IDC_BACK_BUTTON));
+                       pButtonReject->SetActionId(IDA_CANCEL_REJECT_CALL_MESSAGE_PANEL);
+                       pButtonReject->AddActionEventListener(*this);
+                       pButtonReject->SetEnabled(true);
+                       pButtonReject->SetFocus();
+
+                       Button* pButtonCreate = static_cast<Button*>(pKeysPanel->GetControl(IDC_CREATE_BUTTON));
+                       pButtonCreate->SetActionId(IDA_CREATE_REJECT_CALL_MESSAGE);
+                       pButtonCreate->AddActionEventListener(*this);
+                       pButtonCreate->SetEnabled(true);
+                       pButtonCreate->SetFocus();*/
+
+                       pKeysPanel->SetFocus();
+                       pKeysPanel->Draw();
+               }
+               Button* pButtonRejectMessage = static_cast<Button*>(GetControl(IDC_REJECT_MESSAGE_BUTTON));
+               if (pButtonRejectMessage)
+               {
+                       pButtonRejectMessage->SetShowState(false);
+                       pButtonRejectMessage->Invalidate(true);
+                       pButtonRejectMessage->Draw();
+               }
+       }
+       break;
+
+       case IDA_CREATE_REJECT_CALL_MESSAGE:
+       {
+               __pCallPresentor->RejectCall(__incomingCallHandle, true,*__pActiveContactNo);
+               ArrayListT<CallInfo>* pCallList  = static_cast<ArrayListT<CallInfo>*>(__pCallPresentor->GetCallListN());
+               if(pCallList != null && pCallList->GetCount() > 0)
+               {
+                       __pCallPresentor->HandleCallConnected(*pCallList);
+               }
+               pCallList = null;
+       }
+       break;
+
+       case IDA_CANCEL_REJECT_CALL_MESSAGE_PANEL:
+       {
+               HideRejectPanel();
+               SetFocus();
+               Button* pButtonRejectMessage = static_cast<Button*>(GetControl(IDC_REJECT_MESSAGE_BUTTON));
+               if (pButtonRejectMessage)
+               {
+                       pButtonRejectMessage->SetShowState(true);
+                       pButtonRejectMessage->Invalidate(true);
+                       pButtonRejectMessage->Draw();
+               }
+               RequestRedraw(true);
+       }
+       break;
+
+       case IDA_SEND_REJECT_MSG1:
+       case IDA_SEND_REJECT_MSG2:
+       case IDA_SEND_REJECT_MSG3:
+       case IDA_SEND_REJECT_MSG4:
+       case IDA_SEND_REJECT_MSG5:
+       case IDA_SEND_REJECT_MSG6:
+       {
+               __pCallPresentor->RejectCall(__incomingCallHandle, false,*__pActiveContactNo);
+               SmsListener* pSmsListener = new (std::nothrow) SmsListener();
+               SmsManager* pSmsManager = new (std::nothrow) SmsManager();
+               result r = pSmsManager->Construct(*pSmsListener);
+               if (IsFailed(r) == false)
+               {
+                       RecipientList recipient;
+                       recipient.Add(RECIPIENT_TYPE_TO,*__pActiveContactNo);
+                       SmsMessage smsMessage;
+                       String textToBeSent;
+                       //calculate msgIndex
+                       int msgIndex = IDA_SEND_REJECT_MSG1;
+                       msgIndex = actionId - msgIndex;
+                       __pRejectMessageList->GetAt(msgIndex, textToBeSent);
+                       r = smsMessage.SetText(textToBeSent);
+                       if (IsFailed(r) == false)
+                       {
+                               r = pSmsManager->Send(smsMessage,recipient,true);
+                               if (IsFailed(r) == true)
+                               {
+                                       //todo: error message
+                               }
+                       }
+                       else
+                       {
+                               //todo: error message
+                       }
+               }
+               else
+               {
+                       //todo: error message
+               }
+               delete pSmsListener;
+               delete pSmsManager;
+               /*ArrayListT<CallInfo>* pCallList  = static_cast<ArrayListT<CallInfo>*>(__pCallPresentor->GetCallListN());
+               __pCallPresentor->HandleCallConnected(*pCallList);
+               pCallList = null;*/
+       }
+       break;
+
+       default:
+               break;
+       }
+}
+
+void
+IncomingCallForm::OnSceneActivatedN(const SceneId& previousSceneId,    const SceneId& currentSceneId, IList* pArgs)
+{
+       if(__pCallPresentor == null)
+       {
+               __pCallPresentor = CallPresentationModel::GetInstance();
+       }
+       __pCallPresentor->SetTelEventListener(this);
+       HideRejectPanel();
+
+       if(__pAcceptLabel->GetVisualElement()->GetChild(IDI_ACCEPT_VISUAL_ELE_NAME,true) == null)
+       {
+               __pAcceptLabel->GetVisualElement()->AttachChild(*__pAcceptVisElem);
+       }
+       if(__pRejectLabel->GetVisualElement()->GetChild(IDI_REJECT_VISUAL_ELE_NAME,true) == null)
+       {
+               __pRejectLabel->GetVisualElement()->AttachChild(*__pRejectVisElem);
+       }
+
+       __pAcceptVisElem->SetOpacity(1.0f);
+       __pRejectVisElem->SetOpacity(1.00f);
+       for (int i = 0; i < COUNT_ARROW_ELEMENTS; i++)
+       {
+               __pRejectArrowLabel = static_cast<Label*>(__pRejectArrowLabelsList->GetAt(i));
+               String RejectVisualEleName(IDI_REJECT_ARROW_VISUAL_ELE_NAME);
+               RejectVisualEleName.Append(i);
+               __pRejectArrowVisElem = __pRejectArrowLabel->GetVisualElement()->GetChild(RejectVisualEleName,true);
+               __pAcceptArrowLabel = static_cast<Label*>(__pAcceptArrowLabelsList->GetAt(i));
+               String AcceptVisualEleName(IDI_ACCEPT_ARROW_VISUAL_ELE_NAME);
+               AcceptVisualEleName.Append(i);
+               __pAcceptArrowVisElem = __pAcceptArrowLabel->GetVisualElement()->GetChild(AcceptVisualEleName,true);
+               switch(i)
+               {
+                       case 0:
+                               __pAcceptArrowVisElem->SetOpacity(0.6f);
+                               __pRejectArrowVisElem->SetOpacity(0.6f);
+                       break;
+                       case 1:
+                               __pAcceptArrowVisElem->SetOpacity(0.8f);
+                               __pRejectArrowVisElem->SetOpacity(0.8f);
+                       break;
+                       case 2:
+                               __pAcceptArrowVisElem->SetOpacity(1.0f);
+                               __pRejectArrowVisElem->SetOpacity(1.0f);
+                       break;
+               }
+
+       }
+
+
+       if (pArgs != null)
+       {
+               //get Call Info
+               CallInfo* pIncomingCall = static_cast<CallInfo*>(pArgs->GetAt(0));
+               if (pIncomingCall != null)
+               {
+                       //start alert with contact's custom ringtone
+                       __pCallPresentor->StartAlert(*pIncomingCall);
+                       //show contact number
+                       String contactNo;
+                       contactNo.Append(pIncomingCall->GetContactNumber());
+                       if (__pActiveContactNo)
+                       {
+                               delete __pActiveContactNo;
+                               __pActiveContactNo = null;
+                       }
+                       __incomingCallHandle = pIncomingCall->GetCallHandle()->ToLong();
+                       __pActiveContactNo = new (std::nothrow) String();
+
+                       if(contactNo.IsEmpty())
+                       {
+                               AppLogDebug("Number empty");
+                               contactNo.Append(AppUtility::GetResourceString(IDS_NUMBER_UNKNOWN));
+                               AppLogDebug("%ls",contactNo.GetPointer());
+                       }
+                       __pActiveContactNo->Append(contactNo);
+                       //Show person details
+                       ShowPersonDetails(*__pActiveContactNo, IDC_NUMBER_LABEL, IDC_CALLER_LABEL, pIncomingCall);
+                       //Check if incoming call is hidden call, then do not show "Reject with Message" button
+                       Button* pButtonRejectMessage = static_cast<Button*>(GetControl(IDC_REJECT_MESSAGE_BUTTON));
+                       if (pButtonRejectMessage)
+                       {
+                               //for hidden call, contact number is not present
+                               bool showRejectMsgButton = (pIncomingCall->GetContactNumber().IsEmpty() == false);
+                               pButtonRejectMessage->SetShowState(showRejectMsgButton);
+                               pButtonRejectMessage->Invalidate(true);
+                       }
+               }
+               pArgs->RemoveAll();
+               delete pArgs;
+               pArgs = null;
+       }
+}
+
+void
+IncomingCallForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId)
+{
+       if (__pSmallPhotoLabel != null)
+       {
+               RemoveControl(*__pSmallPhotoLabel);
+               __pSmallPhotoLabel = null;
+       }
+       for (int i = 0; i < COUNT_ARROW_ELEMENTS; i++)
+       {
+               __pRejectArrowLabel = static_cast<Label*>(__pRejectArrowLabelsList->GetAt(i));
+               String RejectVisualEleName(IDI_REJECT_ARROW_VISUAL_ELE_NAME);
+               RejectVisualEleName.Append(i);
+               __pRejectArrowVisElem = __pRejectArrowLabel->GetVisualElement()->GetChild(RejectVisualEleName,true);
+               __pRejectArrowVisElem->SetOpacity(0.0f);
+               __pAcceptArrowLabel = static_cast<Label*>(__pAcceptArrowLabelsList->GetAt(i));
+               String AcceptVisualEleName(IDI_ACCEPT_ARROW_VISUAL_ELE_NAME);
+               AcceptVisualEleName.Append(i);
+               __pAcceptArrowVisElem = __pAcceptArrowLabel->GetVisualElement()->GetChild(AcceptVisualEleName,true);
+               __pAcceptArrowVisElem->SetOpacity(0.0f);
+       }
+       if(__pAcceptLabel != null)
+       {
+               if(__pAcceptLabel->GetVisualElement()->GetChild(IDI_ACCEPT_FINAL_VISUAL_ELE_NAME,true) != null)
+               {
+                       AppLogDebug("__pAcceptLabel Detatach child");
+                       __pAcceptLabel->GetVisualElement()->DetachChild(*__pAcceptFinalVisElem);
+               }
+       }
+       if(__pRejectLabel != null)
+       {
+               if(__pRejectLabel->GetVisualElement()->GetChild(IDI_REJECT_FINAL_VISUAL_ELE_NAME,true) != null)
+               {
+                       AppLogDebug("__pRejectLabel Detatach child");
+                       __pRejectLabel->GetVisualElement()->DetachChild(*__pRejectFinalVisElem);
+               }
+
+       }
+}
+
+result
+IncomingCallForm::OnDraw(void)
+{
+       Bitmap* pBackgroundWp = null;
+       // get a Canvas instance
+       Canvas* pCanvas = GetCanvasN();
+
+       pBackgroundWp = AppResource::GetInstance()->GetBitmapN(IDB_CALL_BG);
+
+       if (pCanvas)
+       {
+
+               if (pBackgroundWp)
+               {
+                       pCanvas->DrawBitmap(pCanvas->GetBounds(), *pBackgroundWp);
+               }
+       }
+
+       delete pBackgroundWp;
+       pBackgroundWp = null;
+
+       delete pCanvas;
+       pCanvas = null;
+
+       return E_SUCCESS;
+}
+
+void
+IncomingCallForm::HideRejectPanel(void)
+{
+       Panel* pKeysPanel = static_cast<Panel*>(GetControl(IDC_REJECT_PANEL));
+       if (pKeysPanel)
+       {
+               pKeysPanel->SetShowState(false);
+               Button* pButtonReject = static_cast<Button*>(pKeysPanel->GetControl(IDC_REJECT_MESSAGE_CANCEL_BUTTON));
+               pButtonReject->SetActionId(IDA_CANCEL_REJECT_CALL_MESSAGE_PANEL);
+               pButtonReject->AddActionEventListener(*this);
+               SetBitmapToRejectMessageButton(IDS_REJECT_MESSAGE_BTN,IDB_REJECT_MESSAGE_BG,
+                                                                          IDB_REJECT_MESSAGE_DOWN_ARROW, IDB_REJECT_MESSAGE_ICON, true, false);
+               SetBitmapToRejectMessageButton(IDS_REJECT_MESSAGE_BTN,IDB_REJECT_MESSAGE_BG,
+                                                                          IDB_REJECT_MESSAGE_DOWN_ARROW, IDB_REJECT_MESSAGE_ICON, true, true);
+
+               HideRejectMessageFooter();
+               pKeysPanel->Invalidate(true);
+       }
+}
+
+void
+IncomingCallForm::InitializeTableView(void)
+{
+       Panel* pKeysPanel = static_cast<Panel*>(GetControl(IDC_REJECT_PANEL));
+
+       TableView* pMessageList = static_cast<TableView*>(pKeysPanel->GetControl(IDC_MSG_TABLEVIEW));
+       pMessageList->SetItemProvider(this);
+       pMessageList->AddTableViewItemEventListener(*this);
+}
+
+///////////////////////////////////////////////////////////////////////////////
+/////                  Table View Functionality supporting functions                    /////
+//////////////////////////////////////////////////////////////////////////////
+int
+IncomingCallForm::GetItemCount(void)
+{
+       if(__pRejectMessageList != null && __pRejectMessageList->GetCount() > 0)
+       {
+               return (__pRejectMessageList->GetCount());
+       }
+       return 1;
+}
+
+TableViewItem*
+IncomingCallForm::CreateItem(int itemIndex, int itemWidth)
+{
+       //create a new item
+       TableViewItem* pItem = new (std::nothrow) TableViewItem();
+       pItem->Construct(Dimension(itemWidth, H_LIST_NORMAL_MENU_ITEM), TABLE_VIEW_ANNEX_STYLE_NORMAL);
+
+       //Message text item rectangle
+       Rectangle itemRect(X_LIST_TEXT_ITEM, 0, W_LIST_TEXT_ITEM, H_LIST_NORMAL_MENU_ITEM);
+
+       //Message
+       String itemName(L"");
+       bool isShowSendButton = true;
+       if(__pRejectMessageList != null && __pRejectMessageList->GetCount() > 0)
+       {
+               __pRejectMessageList->GetAt(itemIndex, itemName);
+       }
+       else
+       {
+               itemName.Append(AppUtility::GetResourceString(IDS_NO_MESSAGE_STR));
+               isShowSendButton = false;
+       }
+
+       Label* pMsgLbl = new (std::nothrow) Label();
+       pMsgLbl->Construct(itemRect, itemName);
+       pMsgLbl->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
+       pMsgLbl->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
+       pMsgLbl->SetTextConfig(FONT_SIZE_MSG_TXT, LABEL_TEXT_STYLE_NORMAL);
+       pMsgLbl->SetTextColor(COLOR_LIST_TEXT_NORMAL);
+       pItem->AddControl(*pMsgLbl);
+
+       //Send Button
+       if(isShowSendButton == true)
+       {
+               String sendText = AppUtility::GetResourceString(IDS_LIST_SEND_BUTTON);
+               Button* pSendButton = new (std::nothrow) Button();
+               pSendButton->Construct(Rectangle(X_SEND_TEXT_ITEM, Y_SEND_TEXT_ITEM, W_SEND_TEXT_ITEM, H_SEND_TEXT_ITEM), sendText);
+               //set action id and listener
+               int actionId = IDA_SEND_REJECT_MSG1;
+               switch(itemIndex)
+               {
+               case 0:
+                       actionId = IDA_SEND_REJECT_MSG1;
+                       break;
+               case 1:
+                       actionId = IDA_SEND_REJECT_MSG2;
+                       break;
+               case 2:
+                       actionId = IDA_SEND_REJECT_MSG3;
+                       break;
+               case 3:
+                       actionId = IDA_SEND_REJECT_MSG4;
+                       break;
+               case 4:
+                       actionId = IDA_SEND_REJECT_MSG5;
+                       break;
+               case 5:
+                       actionId = IDA_SEND_REJECT_MSG6;
+                       break;
+               }
+               pSendButton->SetActionId(actionId);
+               pSendButton->AddActionEventListener(*this);
+               pItem->AddControl(*pSendButton);
+               pItem->SetIndividualSelectionEnabled(pSendButton, true);
+       }
+
+       return pItem;
+}
+
+bool
+IncomingCallForm::DeleteItem(int itemIndex, TableViewItem* pItem)
+{
+       delete pItem;
+       pItem = null;
+       return true;
+}
+
+int
+IncomingCallForm::GetDefaultItemHeight(void)
+{
+       return H_LIST_NORMAL_MENU_ITEM;
+}
+
+void
+IncomingCallForm::ShowPersonDetails(const String& phoneNumber, const String& contactLblName, const String& nameLblName, CallInfo* pCallInfo)
+{
+       //call individual methods to show contact number, caller name & photo
+       SetTextToLabel(phoneNumber, contactLblName);
+
+       //fetch contact details based on phone number
+       String* pDisplayName = pCallInfo->FetchCallerNameN();
+       Bitmap* pPhotoBitmap = pCallInfo->FetchCallerPhotoN();
+       ShowCallerPhoto(pPhotoBitmap);
+
+       //free resources
+       if (pDisplayName)
+       {
+               SetTextToLabel(*pDisplayName, nameLblName);
+               delete pDisplayName;
+               pDisplayName = null;
+       }
+
+       if (pPhotoBitmap)
+       {
+               delete pPhotoBitmap;
+               pPhotoBitmap = null;
+       }
+}
+
+void
+IncomingCallForm::SetTextToLabel(const String& textToBeSet, const String& lblName)
+{
+       Label* pContactLbl = static_cast<Label*>(GetControl(lblName));
+       //passing an empty string to SetText fails in label,
+       //if previously valid text has been set
+       if (textToBeSet.IsEmpty() == true && pContactLbl->GetText().IsEmpty() == false)
+       {
+               String stringToBeSet(L"");
+               pContactLbl->SetText(stringToBeSet);
+       }
+
+       else
+       {
+               pContactLbl->SetText(textToBeSet);
+       }
+}
+
+void
+IncomingCallForm::ShowCallerPhoto(const Bitmap* pPhotoId)
+{
+       bool showSmallPhoto = false;
+       //show photo - for Big Photo Id, Animated Call Image
+       if (pPhotoId == null)
+       {
+               pPhotoId = AppUtility::GetBitmapFromResourcesN(IDB_ACTIVE_CALL_DEFAULT_ICON,W_CONFERENCE_PHOTO,W_CONFERENCE_PHOTO);
+       }
+       else
+       {
+               //Check the size of photo
+               // Now checking the condition with && but actually it should be ||
+               //But for now keeping it as && because _pContact->GetThubNail() returns image width as
+               // height 270 and width = 480 . So all images set thru gallery is show as small image
+               if(pPhotoId->GetHeight() <= H_SMALL_PHOTO
+                               && pPhotoId->GetWidth() <= W_SMALL_PHOTO)
+               {
+                       showSmallPhoto = true;
+               }
+       }
+
+       Label* pPhotoLbl = static_cast<Label*>(GetControl(IDC_BIG_PHOTO_LABEL));
+       if(showSmallPhoto == true)
+       {
+               ShowThumbnailImage(pPhotoId);
+       }
+       else
+       {
+               if (pPhotoLbl != null && pPhotoId != null)
+               {
+                       Canvas* pCanvas = new (std::nothrow) Canvas;
+                       Rectangle canvasRect(Rectangle(0, 0, pPhotoLbl->GetBounds().width, pPhotoLbl->GetBounds().height));
+                       pCanvas->Construct(canvasRect);
+                       //draw the contact bitmap
+                       pCanvas->DrawBitmap(canvasRect,*pPhotoId);
+                       Bitmap* pNewPhotoId = new Bitmap();
+                       pNewPhotoId->Construct(*pCanvas, pCanvas->GetBounds());
+                       delete pCanvas;
+
+                       pPhotoLbl->SetBackgroundBitmap(*pNewPhotoId);
+                       pPhotoLbl->Invalidate(true);
+                       delete pNewPhotoId;
+               }
+       }
+}
+
+void
+IncomingCallForm::ShowThumbnailImage(const Bitmap* pPhotoId)
+{
+       Label* pPhotoLbl = static_cast<Label*>(GetControl(IDC_BIG_PHOTO_LABEL));
+
+       if (pPhotoLbl != null && pPhotoId != null)
+       {
+               Canvas* pCanvas = new (std::nothrow) Canvas;
+               Bitmap* pBackground = AppUtility::GetBitmapFromResourcesN(IDB_CALL_THUMBNAIL_BACKGROUND,W_CALL_THUMBNAIL,H_CALL_THUMBNAIL);
+               Bitmap* pShadow = AppUtility::GetBitmapFromResourcesN(IDB_CALL_THUMBNAIL_SHADOW,W_CALL_THUMBNAIL_SHADOW,H_CALL_THUMBNAIL_SHADOW);
+               Rectangle canvasRect(Rectangle(0, 0, pPhotoLbl->GetBounds().width, pPhotoLbl->GetBounds().height));
+               pCanvas->Construct(canvasRect);
+               //draw the back ground
+               pCanvas->DrawBitmap(canvasRect,*pBackground);
+               //draw shadow (to be enabled after correct shadow image is provided )
+               //pCanvas->DrawBitmap(Rectangle((pPhotoLbl->GetBounds().width/2)-(W_CALL_THUMBNAIL_SHADOW/2),
+                       //      (pPhotoLbl->GetBounds().height/2)-(H_CALL_THUMBNAIL_SHADOW/2),W_CALL_THUMBNAIL_SHADOW,H_CALL_THUMBNAIL_SHADOW),*pShadow);
+               //draw the contact bitmap
+               pCanvas->DrawBitmap(Rectangle((pPhotoLbl->GetBounds().width/2)-(W_SMALL_PHOTO/2),
+                               (pPhotoLbl->GetBounds().height/2)-(H_SMALL_PHOTO/2),W_SMALL_PHOTO,H_SMALL_PHOTO),*pPhotoId);
+               Bitmap* pNewPhotoId = new Bitmap();
+               pNewPhotoId->Construct(*pCanvas, pCanvas->GetBounds());
+               delete pCanvas;
+
+               pPhotoLbl->SetBackgroundBitmap(*pNewPhotoId);
+               pPhotoLbl->Invalidate(true);
+               delete pNewPhotoId;
+               delete pBackground;
+               delete pShadow;
+       }
+
+}
+
+void
+IncomingCallForm::ShowCallersPhotoThumbnail(const Bitmap& pPhotoId)
+{
+       //Draw Small Photo and show on small photo label
+       __pSmallPhotoLabel  = new (std::nothrow) Label();//static_cast<Label*>(GetControl(IDC_SMALL_PHOTO_LABEL));
+       __pSmallPhotoLabel->Construct(Rectangle(X_PHOTO_LBL, Y_PHOTO_LBL, W_PHOTO_LBL, H_PHOTO_LBL), L"");
+       __pSmallPhotoLabel->SetBackgroundColor(Color(0,0,0));
+       __pSmallPhotoLabel->SetBackgroundBitmap(pPhotoId);
+       // Add a Label to the Form
+       AddControl(*__pSmallPhotoLabel);
+       __pSmallPhotoLabel->Invalidate(true);
+}
+
+void
+IncomingCallForm::ShowTimerInfo(const String& timerLblName, const String& textToBeDisplayed)
+{
+       Label* pTimerLbl = static_cast<Label*>(GetControl(timerLblName));
+       if (pTimerLbl != null)
+       {
+               pTimerLbl->SetText(textToBeDisplayed);
+       }
+}
+
+void
+IncomingCallForm::SetBitmapToRejectMessageButton(const String& btnName, const String& bgBitmap
+                                                                                               , const String& arrowBitmap, const String& messageIconBitmap, bool isButtonInPanel, bool setButtonPressBitmap)
+{
+
+       Button* pButton = null;
+       if (isButtonInPanel == false)
+       {
+               pButton = static_cast<Button*>(GetControl(IDC_REJECT_MESSAGE_BUTTON));
+       }
+       else
+       {
+               Panel* pKeysPanel = static_cast<Panel*>(GetControl(IDC_REJECT_PANEL));
+               pButton = static_cast<Button*>(pKeysPanel->GetControl(IDC_REJECT_MESSAGE_CANCEL_BUTTON));
+       }
+       Bitmap* pHoldBmp = null;
+       Canvas* pCanvas = null;
+       pCanvas = new (std::nothrow) Canvas();
+       pCanvas->Construct(Rectangle(0,0,pButton->GetBounds().width,pButton->GetBounds().height));
+       //set bitmap to button
+       pHoldBmp = AppUtility::GetBitmapFromResourcesN(bgBitmap);
+       if (pHoldBmp)
+       {
+               //scale bitmap to predefined size
+               pHoldBmp->SetScalingQuality(BITMAP_SCALING_QUALITY_MID);
+               pHoldBmp->Scale(Dimension(pButton->GetBounds().width, H_MESSAGE_BG_BITMAP));
+               pCanvas->DrawBitmap(Rectangle(Point(0, 0), Dimension(pHoldBmp->GetWidth(), pHoldBmp->GetHeight())), *pHoldBmp);
+       }
+       delete pHoldBmp;
+       pHoldBmp = null;
+       pHoldBmp = AppUtility::GetBitmapFromResourcesN(arrowBitmap);
+       if (pHoldBmp)
+       {
+               //scale bitmap to predefined size
+               pHoldBmp->SetScalingQuality(BITMAP_SCALING_QUALITY_MID);
+               pHoldBmp->Scale(Dimension(W_ARROW_BITMAP, H_ARROW_BITMAP));
+               pCanvas->DrawBitmap(Rectangle(Point((pButton->GetBounds().width / 2 - 17/*Width of arrow / 2*/), 0), Dimension(pHoldBmp->GetWidth(), pHoldBmp->GetHeight())), *pHoldBmp);
+       }
+       delete pHoldBmp;
+       pHoldBmp = null;
+
+
+
+       //set button name
+       String holdBtnName = AppUtility::GetResourceString(btnName);
+       Dimension textDimension;
+       if (!holdBtnName.IsEmpty())
+       {
+               Font font;
+               font.Construct(FONT_STYLE_PLAIN, pButton->GetTextSize());
+               font.GetTextExtent(holdBtnName, holdBtnName.GetLength(), textDimension);
+               textDimension.height = textDimension.height + font.GetDescender();
+               TextElement* pTextElement = new (std::nothrow) TextElement();
+               pTextElement->Construct(holdBtnName);
+               Color textColor(249, 249, 249);
+               if (setButtonPressBitmap)
+               {
+                       textColor.SetAlpha(255);
+               }
+               else
+               {
+                       textColor.SetAlpha(127);
+               }
+
+               pTextElement->SetTextColor(textColor);
+               pTextElement->SetFont(font);
+
+               EnrichedText* pEnrichedText = new (std::nothrow) EnrichedText();
+               pEnrichedText->Construct(textDimension);
+               pEnrichedText->Add(*pTextElement);
+               //Point textPos((X_MESSAGE_BITMAP + pHoldBmp->GetWidth() + MESSAGE_TEXT_X_MARGIN), Y_MESSAGE_BITMAP + MESSAGE_TEXT_Y_MARGIN);
+               Point textPos((pButton->GetWidth()/2)-(textDimension.width/2) + MESSAGE_TEXT_X_MARGIN,Y_MESSAGE_BITMAP + MESSAGE_TEXT_Y_MARGIN);
+               pCanvas->DrawText(textPos, *pEnrichedText);
+               // Cleans up
+               pEnrichedText->RemoveAll(true);
+               delete pEnrichedText;
+       }
+
+
+       pHoldBmp = AppUtility::GetBitmapFromResourcesN(messageIconBitmap);
+       if (pHoldBmp)
+       {
+               //scale bitmap to predefined size
+               pHoldBmp->SetScalingQuality(BITMAP_SCALING_QUALITY_MID);
+               pHoldBmp->Scale(Dimension(W_MESSAGE_BITMAP, H_MESSAGE_BITMAP));
+               //pCanvas->DrawBitmap(Rectangle(Point(X_MESSAGE_BITMAP, Y_MESSAGE_BITMAP), Dimension(pHoldBmp->GetWidth(), pHoldBmp->GetHeight())), *pHoldBmp);
+               pCanvas->DrawBitmap(Rectangle(Point((pButton->GetWidth()/2)-(textDimension.width/2) -pHoldBmp->GetWidth(), Y_MESSAGE_BITMAP), Dimension(pHoldBmp->GetWidth(), pHoldBmp->GetHeight())), *pHoldBmp);
+       }
+
+       //set background bitmpa to button
+       Bitmap* pActualBgBmp = new (std::nothrow) Bitmap();
+       pActualBgBmp->Construct(*pCanvas, pCanvas->GetBounds());
+       if (setButtonPressBitmap)
+       {
+               pButton->SetPressedBackgroundBitmap(*pActualBgBmp);
+       }
+       else
+       {
+               pButton->SetNormalBackgroundBitmap(*pActualBgBmp);
+       }
+       delete pActualBgBmp;
+       delete pHoldBmp;
+       delete pCanvas;
+}
+
+/*!In OnTouchPressed, It creates the three visual elements and starts the animation of opacity and rotation variation
+  */
+void
+IncomingCallForm::OnTouchPressed(const Control& source, const Point& currentPosition, const TouchEventInfo& touchInfo)
+{
+       __pCallPresentor->StopAlert();
+       if (currentPosition.x < VALID_TOUCH_X_OFFSET && currentPosition.y < VALID_TOUCH_Y_OFFSET)
+       {
+               Rectangle rect = source.GetBounds();
+               if (source.Equals(*__pAcceptLabel))
+               {
+                       __isAnswerCallStarted = true;
+                       __isRejectCallStarted = false;
+               }
+               else if (source.Equals(*__pRejectLabel))
+               {
+                       __isAnswerCallStarted = false;
+                       __isRejectCallStarted = true;
+               }
+               else
+               {
+                       // touch event between the 2 labels. So Do nothing
+                       return;
+               }
+
+       }
+}
+
+// On Touch released, the animation and the visual elements disappear
+void
+IncomingCallForm::OnTouchReleased(const Control& source, const Point& currentPosition, const TouchEventInfo& touchInfo)
+{
+       if (__isAnswerCallStarted == true)
+       {
+               if (currentPosition.x > REJECT_LABEL_X_OFFSET)
+               {
+                       //Right reject icon
+                       if(__pRejectFinalVisElem == null)
+                       {
+                               __pRejectFinalVisElem = new (std::nothrow) VisualElement();
+                       }
+                       __pRejectFinalVisElem->Construct();
+                       __pRejectFinalVisElem->SetBounds(FloatRectangle(0, 0, W_DIAL_LABEL, H_DIAL_LABEL));
+                       __pRejectFinalVisElem->SetShowState(true);
+                       __pRejectFinalVisElem->SetOpacity(1.00f);
+                       __pRejectFinalVisElem->SetName(IDI_REJECT_FINAL_VISUAL_ELE_NAME);
+                       if(__pRejectLabel->GetVisualElement()->GetChild(IDI_REJECT_FINAL_VISUAL_ELE_NAME,true) == null)
+                       {
+                               AppLogDebug("AttachChild __pRejectFinalVisElem");
+                               __pRejectLabel->GetVisualElement()->AttachChild(*__pRejectFinalVisElem);
+                       }
+                       Canvas* pCanvas = __pRejectFinalVisElem->GetCanvasN();
+                       if(pCanvas != null)
+                       {
+                               pCanvas->SetBackgroundColor(COLOR_SWIPE_PANEL);
+                               pCanvas->FillRectangle(COLOR_SWIPE_PANEL, Rectangle(0, 0, W_DIAL_LABEL, H_DIAL_LABEL));
+                               pCanvas->DrawBitmap(Rectangle(0, 0, W_DIAL_LABEL, W_DIAL_LABEL), *__pAcceptCircle);
+                               pCanvas->DrawBitmap(Rectangle(DIAL_ICON_X_OFFSET, DIAL_ICON_Y_OFFSET, W_DIAL_BITMAP, H_DIAL_BITMAP), *__pAcceptDial);
+                               delete pCanvas;
+                       }
+
+                       __pAcceptVisElem->SetOpacity(0.0f);
+                       //fetch already active call list
+                       ArrayListT<CallInfo>* pCallList  = static_cast<ArrayListT<CallInfo>*>(__pCallPresentor->GetCallListN());
+                       if (pCallList != null && pCallList->GetCount() > 0)
+                       {
+                               //then atleast 1 active call exist.
+                               CallInfo phnCallInfo;
+                               pCallList->GetAt(0,phnCallInfo);
+                               //Check if only 1 call exist and it is on Hold
+                               if(pCallList->GetCount() == 1 && phnCallInfo.IsOnHold())
+                               {
+                                       //directly accept call
+                                       __pCallPresentor->AcceptIncomingCall(ANSERWING_OPTION_ACCEPT_CALL,__incomingCallHandle);
+                               }
+                               else
+                               {
+                                       //Either 1 call exist and not "on Hold".
+                                       //Or 2 calls exist.
+                                       if(__pOptionPopup != null)
+                                       {
+                                               delete __pOptionPopup;
+                                               __pOptionPopup = null;
+                                       }
+                                       __pOptionPopup = new (std::nothrow) CallOptionPopup(*this,*(__pCallPresentor));
+                                       __pOptionPopup->Initialize();
+                                       __pOptionPopup->SetShowState(true);
+                                       __pOptionPopup->Draw();
+                                       __pOptionPopup->Show();
+                               }
+                               pCallList->RemoveAll();
+                       }
+                       else
+                       {
+                               //no active call - Accept the  incoming call
+                               __pCallPresentor->AcceptIncomingCall(ANSERWING_OPTION_ACCEPT_CALL,__incomingCallHandle);
+                       }
+                       delete pCallList;
+                       pCallList = null;
+               }
+               else
+               {
+                       __pAcceptVisElem->SetOpacity(1.0f);
+                       __pRejectVisElem->SetOpacity(1.00f);
+
+               }
+       }
+       else if (__isRejectCallStarted == true)
+       {
+               if (currentPosition.x < ACCEPT_LABEL_RELATIVE_POS)
+               {
+                       //left dial icon
+                       if(__pAcceptFinalVisElem == null)
+                       {
+                               __pAcceptFinalVisElem = new (std::nothrow) VisualElement();
+                       }
+                       __pAcceptFinalVisElem->Construct();
+                       __pAcceptFinalVisElem->SetBounds(FloatRectangle(0, 0, W_DIAL_LABEL, H_DIAL_LABEL));
+                       __pAcceptFinalVisElem->SetShowState(true);
+                       __pAcceptFinalVisElem->SetOpacity(1.0f);
+                       __pAcceptFinalVisElem->SetName(IDI_ACCEPT_FINAL_VISUAL_ELE_NAME);
+                       if(__pAcceptLabel->GetVisualElement()->GetChild(IDI_ACCEPT_FINAL_VISUAL_ELE_NAME,true) == null)
+                       {
+                               AppLogDebug("AttachChild __pAcceptFinalVisElem");
+                               __pAcceptLabel->GetVisualElement()->AttachChild(*__pAcceptFinalVisElem);
+                       }
+                       Canvas* pCanvas = __pAcceptFinalVisElem->GetCanvasN();
+                       if(pCanvas != null)
+                       {
+                               AppLogDebug("__pAcceptFinalVisElem drawing");
+                               pCanvas->SetBackgroundColor(COLOR_SWIPE_PANEL);
+                               pCanvas->SetForegroundColor(COLOR_SWIPE_PANEL);
+                               pCanvas->FillRectangle(COLOR_SWIPE_PANEL, Rectangle(0, 0, W_DIAL_LABEL, H_DIAL_LABEL));
+                               pCanvas->DrawBitmap(Rectangle(0, 0, W_DIAL_LABEL, H_DIAL_LABEL), *__pRejectCircle);
+                               pCanvas->DrawBitmap(Rectangle(DIAL_ICON_X_OFFSET, DIAL_ICON_Y_OFFSET, W_DIAL_BITMAP, H_DIAL_BITMAP), *__pRejectDial);
+                               delete pCanvas;
+                       }
+                       __pRejectVisElem->SetOpacity(0.0f);
+                       //Reject the call
+                       __pCallPresentor->RejectCall(__incomingCallHandle, false,*__pActiveContactNo);
+               }
+               else
+               {
+                       __pAcceptVisElem->SetOpacity(1.0f);
+                       __pRejectVisElem->SetOpacity(1.00f);
+
+               }
+       }
+       __isAnswerCallStarted = false;
+       __isRejectCallStarted = false;
+}
+
+void
+IncomingCallForm::OnTouchMoved(const Control& source, const Point& currentPosition, const TouchEventInfo& touchInfo)
+{
+       if (__isAnswerCallStarted == true)
+       {
+               if (currentPosition.x > 170 && currentPosition.x < 578)
+               {
+                       if (currentPosition.x > REJECT_LABEL_X_OFFSET)
+                       {
+                               __pRejectVisElem->SetOpacity(0.60f);
+                               __pAcceptVisElem->SetOpacity(0.60f);
+                       }
+                       else
+                       {
+                               __pRejectVisElem->SetOpacity(1.0f);
+                               __pAcceptVisElem->SetOpacity(1.0f);
+                       }
+
+               }
+       }
+       if (__isRejectCallStarted == true)
+       {
+               if (currentPosition.x < 0 && currentPosition.x > -522)
+               {
+                       if (currentPosition.x < ACCEPT_LABEL_RELATIVE_POS)
+                       {
+                               __pRejectVisElem->SetOpacity(0.60f);
+                               __pAcceptVisElem->SetOpacity(0.60f);
+                       }
+                       else
+                       {
+                               __pRejectVisElem->SetOpacity(1.0f);
+                               __pAcceptVisElem->SetOpacity(1.0f);
+                       }
+               }
+       }
+}
+
+void
+IncomingCallForm::OnItemSelected(int itemIndex)
+{
+
+       ArrayList* pArgs = new (std::nothrow) ArrayList(SingleObjectDeleter);
+       pArgs->Construct();
+
+       //display name, mobile number
+       Integer* argIndex = new (std::nothrow) Integer(itemIndex);
+       pArgs->Add(argIndex);
+       SendUserEvent(REQUEST_ITEM_SELECTED,pArgs);
+
+}
+
+void
+IncomingCallForm::HandleMultipleCallSelection(int itemIndex)
+{
+       if(__pAcceptLabel->GetVisualElement()->GetChild(IDI_ACCEPT_VISUAL_ELE_NAME,true) == null)
+       {
+               __pAcceptLabel->GetVisualElement()->AttachChild(*__pAcceptVisElem);
+       }
+       if(__pRejectLabel->GetVisualElement()->GetChild(IDI_REJECT_VISUAL_ELE_NAME,true) == null)
+       {
+               __pRejectLabel->GetVisualElement()->AttachChild(*__pRejectVisElem);
+       }
+
+       __pAcceptVisElem->SetOpacity(1.0f);
+       __pRejectVisElem->SetOpacity(1.00f);
+
+       for (int i = 0; i < COUNT_ARROW_ELEMENTS; i++)
+       {
+               __pRejectArrowLabel = static_cast<Label*>(__pRejectArrowLabelsList->GetAt(i));
+               String RejectVisualEleName(IDI_REJECT_ARROW_VISUAL_ELE_NAME);
+               RejectVisualEleName.Append(i);
+               __pRejectArrowVisElem = __pRejectArrowLabel->GetVisualElement()->GetChild(RejectVisualEleName,true);
+               __pRejectArrowVisElem->SetOpacity(0.0f);
+               __pAcceptArrowLabel = static_cast<Label*>(__pAcceptArrowLabelsList->GetAt(i));
+               String AcceptVisualEleName(IDI_ACCEPT_ARROW_VISUAL_ELE_NAME);
+               AcceptVisualEleName.Append(i);
+               __pAcceptArrowVisElem = __pAcceptArrowLabel->GetVisualElement()->GetChild(AcceptVisualEleName,true);
+               __pAcceptArrowVisElem->SetOpacity(0.0f);
+       }
+       if (__pRejectFinalVisElem != null)
+       {
+               __pRejectFinalVisElem->Destroy();
+               __pRejectFinalVisElem = null;
+       }
+
+       if (__pAcceptFinalVisElem != null)
+       {
+               __pAcceptFinalVisElem->Destroy();
+               __pAcceptFinalVisElem = null;
+       }
+       if (__pOptionPopup)
+       {
+               delete __pOptionPopup;
+               __pOptionPopup = null;
+       }
+       //accept call
+       __pCallPresentor->AcceptIncomingCall(CallAnsweringOptions(itemIndex),__incomingCallHandle);
+}
+
+void
+IncomingCallForm::OnUserEventReceivedN(RequestId requestId, Tizen::Base::Collection::IList* pArgs)
+{
+       switch(requestId)
+       {
+               case REQUEST_ITEM_SELECTED:
+               {
+                       if(pArgs != null)
+                       {
+                               Integer *index = static_cast<Integer*>(pArgs->GetAt(0));
+                               if(index != null)
+                               {
+                                       HandleMultipleCallSelection(index->ToInt());
+                               }
+                       }
+               }
+               break;
+       }
+}
+
+void
+IncomingCallForm::OnFormBackRequested(Tizen::Ui::Controls::Form& source)
+{
+       AppLogDebug("Enter");
+       HideRejectPanel();
+       SetFocus();
+       Button* pButtonRejectMessage = static_cast<Button*>(GetControl(IDC_REJECT_MESSAGE_BUTTON));
+       if (pButtonRejectMessage)
+       {
+               pButtonRejectMessage->SetShowState(true);
+               pButtonRejectMessage->Invalidate(true);
+               pButtonRejectMessage->Draw();
+       }
+       RequestRedraw(true);
+
+}
diff --git a/src/CallInfo.cpp b/src/CallInfo.cpp
new file mode 100644 (file)
index 0000000..168c24c
--- /dev/null
@@ -0,0 +1,364 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file       CallCallInfo.cpp
+ * @brief      Call Information class
+ */
+#include "CallAppUtility.h"
+#include "CallInfo.h"
+#include <FMedia.h>
+
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Graphics;
+using namespace Tizen::Media;
+using namespace Tizen::Social;
+
+CallInfo::CallInfo(void)
+{
+       //by Default, neither a conference call nor emergency call
+       __isConfCall = false;
+       __isEmergency = false;
+       __callType = VOICE_CALL;
+       __isOnHold = false;
+       __callConnectTime = 0;
+       __callNotificationTime = 0;
+       __pCallHandle = null;
+       __pEndCallCause = null;
+       __pParticipantCallHandles = null;
+       __pContact = null;
+}
+
+CallInfo::~CallInfo(void)
+{
+       if (__pCallHandle)
+       {
+               delete __pCallHandle;
+       }
+
+       if (__pEndCallCause)
+       {
+               delete __pEndCallCause;
+       }
+
+       if (__pParticipantCallHandles)
+       {
+               delete __pParticipantCallHandles;
+               __pParticipantCallHandles = null;
+       }
+       if (__pContact != null)
+       {
+               delete __pContact;
+       }
+}
+
+Long*
+CallInfo::GetCallHandle(void)
+{
+       return __pCallHandle;
+}
+
+void
+CallInfo::SetCallHandle(unsigned int handle)
+{
+       if (__pCallHandle != null)
+       {
+               delete __pCallHandle;
+       }
+       __pCallHandle = new (std::nothrow) Long(handle);
+}
+
+bool
+CallInfo::IsConferenceCall(void)
+{
+       return __isConfCall;
+}
+
+void
+CallInfo::SetConference(bool isConferenceCall)
+{
+       __isConfCall = isConferenceCall;
+}
+
+bool
+CallInfo::IsEmergency(void)
+{
+       return __isEmergency;
+}
+
+void
+CallInfo::SetEmergency(bool isEmergency)
+{
+       __isEmergency = isEmergency;
+}
+
+String&
+CallInfo::GetContactNumber(void)
+{
+       return __contactNumber;
+}
+
+void
+CallInfo::SetContactNumber(String& contactNumber)
+{
+       if (__isConfCall == false)
+       {
+               __contactNumber = contactNumber;
+       }
+}
+
+void
+CallInfo::SetContactInfo(const Contact& contact)
+{
+       if (__pContact != null)
+       {
+               delete __pContact;
+               __pContact = null;
+       }
+       __pContact = new (std::nothrow) Contact(contact);
+}
+
+bool
+CallInfo::IsOnHold(void)
+{
+       return __isOnHold;
+}
+
+void
+CallInfo::SetOnHold(bool onHold)
+{
+       __isOnHold = onHold;
+}
+
+long long
+CallInfo::GetCallConnectTime(void)
+{
+       return __callConnectTime;
+}
+
+void
+CallInfo::SetCallConnectTime(long long connectTime)
+{
+       __callConnectTime = connectTime;
+}
+
+long long
+CallInfo::GetCallNotificationTime(void)
+{
+       return __callNotificationTime;
+}
+
+void
+CallInfo::SetCallNotificationTime(long long callNotificationTime)
+{
+       __callNotificationTime = callNotificationTime;
+}
+
+String&
+CallInfo::GetEndCallCause(void)
+{
+       return *(__pEndCallCause);
+}
+
+void
+CallInfo::SetEndCallCause(String& pEndCause)
+{
+       if (__pEndCallCause != null)
+       {
+               delete __pEndCallCause;
+       }
+       __pEndCallCause = new (std::nothrow) String(pEndCause);
+}
+
+IListT<CallInfo>*
+CallInfo::GetCallerList(void)
+{
+       return __pParticipantCallHandles;
+}
+
+int
+CallInfo::GetCallerListCount(void)
+{
+       if (__pParticipantCallHandles != null)
+       {
+               return __pParticipantCallHandles->GetCount();
+       }
+       return -1;
+}
+
+result
+CallInfo::AddCallToCallerList(CallInfo& callInfo)
+{
+       if (__pParticipantCallHandles == NULL)
+       {
+               __pParticipantCallHandles = new (std::nothrow) ArrayListT<CallInfo>();
+       }
+       result r = E_FAILURE;
+       CallInfo* pNewCallInfo = new (std::nothrow) CallInfo();
+       *pNewCallInfo = callInfo;
+       r = __pParticipantCallHandles->Add(*pNewCallInfo);
+       pNewCallInfo = NULL;
+       return r;
+}
+
+result
+CallInfo::RemoveCallFromCallerList(int index)
+{
+       result r = E_FAILURE;
+       if (__pParticipantCallHandles == NULL)
+       {
+               return r;
+       }
+       r = __pParticipantCallHandles->RemoveAt(index);
+       return r;
+}
+
+void
+CallInfo::SetCalllogType(CallLogType callLogType)
+{
+       __calllogType = callLogType;
+}
+
+CallLogType
+CallInfo::GetCalllogType(void)
+{
+       return __calllogType;
+}
+
+bool
+CallInfo::operator ==(const CallInfo& rhs) const
+{
+       return (this->__pCallHandle->Equals(*(rhs.__pCallHandle)));
+}
+
+bool
+CallInfo::operator !=(const CallInfo& rhs) const
+{
+       return (!(this->__pCallHandle->Equals(*(rhs.__pCallHandle))));
+}
+
+CallInfo&
+CallInfo::operator =(const CallInfo& rhs)
+{
+       if (this != null)
+       {
+               this->__isConfCall = rhs.__isConfCall;
+               this->__callType = rhs.__callType;
+               this->__isEmergency = rhs.__isEmergency;
+               this->__contactNumber = rhs.__contactNumber;
+               this->__isOnHold = rhs.__isOnHold;
+               //call connected time
+               this->__callConnectTime = rhs.__callConnectTime;
+               //call notification time
+               this->__callNotificationTime = rhs.__callNotificationTime;
+               this->__calllogType = rhs.__calllogType;
+               //copy call handle, if exist
+               if (this->__pCallHandle != null)
+               {
+                       delete this->__pCallHandle;
+                       this->__pCallHandle = null;
+               }
+               if (rhs.__pCallHandle != null)
+               {
+                       this->__pCallHandle = new (std::nothrow) Long(*(rhs.__pCallHandle));
+               }
+
+               //copy end call cause, if any exist
+               if (this->__pEndCallCause != null)
+               {
+                       delete this->__pEndCallCause;
+                       this->__pEndCallCause = null;
+               }
+               if (rhs.__pEndCallCause)
+               {
+                       this->__pEndCallCause = new (std::nothrow) String(*(rhs.__pEndCallCause));
+               }
+
+               //Add participant call list
+               if (this->__pParticipantCallHandles != null)
+               {
+                       delete this->__pParticipantCallHandles;
+                       this->__pParticipantCallHandles = null;
+               }
+               if (rhs.__pParticipantCallHandles != null)
+               {
+                       this->__pParticipantCallHandles = new (std::nothrow) ArrayListT<CallInfo>();
+                       this->__pParticipantCallHandles->Construct(*(rhs.__pParticipantCallHandles));
+               }
+               if (this->__pContact != null)
+               {
+                       delete this->__pContact;
+                       this->__pContact = null;
+               }
+               if (rhs.__pContact != null)
+               {
+                       this->__pContact = new (std::nothrow) Contact(*(rhs.__pContact));
+               }
+       }
+
+       return *this;
+}
+
+String*
+CallInfo::FetchCallerNameN(void)
+{
+       String displayName(L"");
+
+       //get caller name from already fetched contact info
+       if (__pContact != null)
+       {
+               //fetch name to be displayed
+               __pContact->GetValue(CONTACT_PROPERTY_ID_DISPLAY_NAME, displayName);
+               if (displayName.IsEmpty())
+               {
+                       String firstName(L"");
+                       String lastName(L"");
+                       __pContact->GetValue(CONTACT_PROPERTY_ID_FIRST_NAME, firstName);
+                       __pContact->GetValue(CONTACT_PROPERTY_ID_LAST_NAME, lastName);
+                       displayName.Append(firstName + " " + lastName);
+               }
+       }
+
+       return new (std::nothrow) String(displayName);
+}
+
+Bitmap*
+CallInfo::FetchCallerPhotoN(void)
+{
+
+       if (__pContact != null)
+       {
+               String thumbnailPath;
+               Bitmap* pThumbnail = null;
+       //      __pContact->GetValue(CONTACT_PROPERTY_ID_THUMBNAIL, thumbnailPath);
+               thumbnailPath = __pContact->GetThumbnailPath();
+               ImageBuffer thumbnailImageBuffer;
+               result r = thumbnailImageBuffer.Construct(thumbnailPath);
+               if (r == E_SUCCESS)
+               {
+                       pThumbnail = thumbnailImageBuffer.GetBitmapN(BITMAP_PIXEL_FORMAT_ARGB8888, BUFFER_SCALING_NONE);
+               }
+               return pThumbnail;
+       }
+       return null;
+}
+
+const Contact*
+CallInfo::GetContactInfo(void)
+{
+       return __pContact;
+}
diff --git a/src/CallOptionPopup.cpp b/src/CallOptionPopup.cpp
new file mode 100644 (file)
index 0000000..ce619b6
--- /dev/null
@@ -0,0 +1,301 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file       CallCallOptionPopup.cpp
+ * @brief      Call Options Popup class
+ */
+#include <FApp.h>
+#include <FSocial.h>
+#include <FSystem.h>
+#include <FUi.h>
+#include <FGraphics.h>
+#include <FMedia.h>
+
+#include "CallOptionPopup.h"
+#include "CallAppUtility.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Base::Utility;
+using namespace Tizen::App;
+using namespace Tizen::Graphics;
+using namespace Tizen::Social;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+
+const int W_POPUP = 620;
+const int H_POPUP = 712;
+const int W_CANCEL_BUTTON = 400;
+const int H_CANCEL_BUTTON = 72;
+const int CANCEL_BUTTON_PADDING = 20;
+const int H_LIST_ITEM = 112;
+const int W_LIST_ITEM = 112;
+const int HORIZONTAL_PADDING = 16;
+const int VERTICAL_PADDING = 110;
+const int IDA_BUTTON_CANCEL_OPTIONS_POPUP = 502;
+static const wchar_t* IDL_CALL_OPTION_POPUP = L"IDL_CALL_OPTION_POPUP";
+
+CallOptionPopup::CallOptionPopup(IPopupItemSelectListener& listener, CallPresentationModel& callPresenter)
+       : __pOptionsList(null)
+       , __popupListener(listener)
+       , __callPresenter(callPresenter)
+{
+}
+
+CallOptionPopup::~CallOptionPopup(void)
+{
+       if (__pOptionsList != null)
+       {
+               delete __pOptionsList;
+               __pOptionsList = null;
+       }
+}
+
+result
+CallOptionPopup::Initialize(void)
+{
+       result r = E_SUCCESS;
+       r = Construct(IDL_CALL_OPTION_POPUP);
+       TryReturn(r == E_SUCCESS, r, "CallOptionPopup construction failed");
+
+       r = ConstructListData();
+       TryReturn(r == E_SUCCESS, r, "List data not available");
+
+       int listHeight = H_LIST_ITEM * __pOptionsList->GetCount();
+       int popupHeight = H_CANCEL_BUTTON + listHeight + CANCEL_BUTTON_PADDING + VERTICAL_PADDING;
+       r = SetSize(Dimension(W_POPUP + HORIZONTAL_PADDING, popupHeight));
+       TryReturn(r == E_SUCCESS, r, "CallOptionPopup::SetSize() failed");
+
+       String strText;
+       Application::GetInstance()->GetAppResource()->GetString(L"IDS_CANCEL", strText);
+       Button* pCancelButton = new (std::nothrow) Button();
+       r = pCancelButton->Construct(Rectangle(VERTICAL_PADDING, listHeight + CANCEL_BUTTON_PADDING , W_CANCEL_BUTTON, H_CANCEL_BUTTON), strText);
+       pCancelButton->SetActionId(IDA_BUTTON_CANCEL_OPTIONS_POPUP);
+       pCancelButton->AddActionEventListener(*this);
+       r = AddControl(*pCancelButton);
+       TryReturn(r == E_SUCCESS, r, "CallOptionPopup::AddControl() failed");
+
+       ListView* pListView = new (std::nothrow) ListView();
+       pListView->Construct(Rectangle(0, 0, W_POPUP - HORIZONTAL_PADDING, listHeight), true, SCROLL_STYLE_FADE_OUT);
+       pListView->AddListViewItemEventListener(*this);
+       pListView->SetItemProvider(*this);
+       r = AddControl(*pListView);
+
+       return r;
+}
+
+result
+CallOptionPopup::ConstructListData(void)
+{
+       result r = E_FAILURE;
+
+       //fetch active call list
+       ArrayListT<CallInfo>* pCallList  = static_cast<ArrayListT<CallInfo>*>(__callPresenter.GetCallListN());
+       if (pCallList != null && pCallList->GetCount() > 0)
+       {
+               String optionStr(L"");
+               String* pFirstOption = new (std::nothrow) String();
+               String* pSecondOption = new (std::nothrow) String();
+               String* pThirdOption = null;
+               if (pCallList->GetCount() == IDI_MAX_ACTIVE_CALLS)
+               {
+                       //2 calls(Active+Held) present - 3 options are shown
+                       for (int index = 0;index < pCallList->GetCount(); index++)
+                       {
+                               CallInfo callInfo;
+                               pCallList->GetAt(index,callInfo);
+
+                               optionStr.Clear();
+                               if (callInfo.IsConferenceCall() == true)
+                               {
+                                       String option = AppUtility::GetResourceString(L"IDS_CALL_OPTION4");;
+                                       if (callInfo.IsOnHold() == true)
+                                       {
+                                               option = AppUtility::GetResourceString(L"IDS_CALL_OPTION3");
+                                       }
+                                       optionStr.Format(option.GetLength(), option.GetPointer(), callInfo.GetCallerListCount());
+                               }
+                               else
+                               {
+                                       //show display name, if available, Else show contact number
+                                       String* pDisplayName = callInfo.FetchCallerNameN();
+                                       if (pDisplayName->IsEmpty() == true)
+                                       {
+                                               //If contact number is also not present show unknown
+                                               if(callInfo.GetContactNumber().IsEmpty() == false)
+                                               {
+                                               pDisplayName->Append(callInfo.GetContactNumber());
+                                       }
+                                               else
+                                               {
+                                                       pDisplayName->Append(AppUtility::GetResourceString(IDS_NUMBER_UNKNOWN));
+                                               }
+                                       }
+                                       optionStr = AppUtility::GetResourceString(L"IDS_CALL_OPTION5");
+                                       optionStr.Append(*pDisplayName);
+                                       delete pDisplayName;
+                               }
+
+                               //Check whether to show as 1st or 2nd option
+                               if (callInfo.IsOnHold() == false)
+                               {
+                                       pFirstOption->Append(optionStr);
+                               }
+                               else
+                               {
+                                       pSecondOption->Append(optionStr);
+                               }
+                       }
+                       //3rd Option
+                       pThirdOption = new (std::nothrow) String();
+                       pThirdOption->Append(AppUtility::GetResourceString(L"IDS_CALL_OPTION6"));
+               }
+               else
+               {
+                       //only one call - 2 options are shown.
+                       CallInfo firstCallInfo;
+                       pCallList->GetAt(0,firstCallInfo);
+                       if (firstCallInfo.IsConferenceCall() == false)
+                       {
+                               //show display name if available, else show contact number
+                               String* pDisplayName = firstCallInfo.FetchCallerNameN();
+                               if (pDisplayName->IsEmpty() == true)
+                               {
+                                       if(firstCallInfo.GetContactNumber().IsEmpty() == false)
+                                       {
+                                       pDisplayName->Append(firstCallInfo.GetContactNumber());
+                                       }
+                                       else
+                                       {
+                                               pDisplayName->Append(AppUtility::GetResourceString(IDS_NUMBER_UNKNOWN));
+                                       }
+                               }
+                               optionStr = AppUtility::GetResourceString(L"IDS_CALL_OPTION1");
+                               pFirstOption->Format((optionStr.GetLength() + pDisplayName->GetLength()),optionStr.GetPointer(),pDisplayName->GetPointer());
+                               //2nd option
+                               optionStr = AppUtility::GetResourceString(L"IDS_CALL_OPTION2");
+                               pSecondOption->Append(optionStr + *pDisplayName);
+                               delete pDisplayName;
+                       }
+                       else
+                       {
+                               String optionStr2(L"");
+                               if (firstCallInfo.IsOnHold() == true)
+                               {
+                                       optionStr = AppUtility::GetResourceString(L"IDS_CALL_OPTION8");
+                                       optionStr2 = AppUtility::GetResourceString(L"IDS_CALL_OPTION3");
+                               }
+                               else
+                               {
+                                       optionStr = AppUtility::GetResourceString(L"IDS_CALL_OPTION7");
+                                       optionStr2 = AppUtility::GetResourceString(L"IDS_CALL_OPTION4");
+                               }
+                               pFirstOption->Format(optionStr.GetLength(), optionStr.GetPointer(), firstCallInfo.GetCallerListCount());
+                               pSecondOption->Format(optionStr2.GetLength(), optionStr2.GetPointer(), firstCallInfo.GetCallerListCount());
+                       }
+               }
+               //show options
+               __pOptionsList =  new (std::nothrow) ArrayList(SingleObjectDeleter);
+               __pOptionsList->Construct();
+               __pOptionsList->Add(pFirstOption);
+               __pOptionsList->Add(pSecondOption);
+               if (pThirdOption != null)
+               {
+                       __pOptionsList->Add(pThirdOption);
+               }
+               r = E_SUCCESS;
+               pCallList->RemoveAll();
+       }
+       delete pCallList;
+       return r;
+}
+
+void
+CallOptionPopup::OnListViewItemStateChanged(ListView& listView, int index,
+               int elementId, ListItemStatus status)
+{
+       Popup::SetShowState(false);
+       __popupListener.OnItemSelected(elementId);
+       return;
+}
+
+int
+CallOptionPopup::GetItemCount(void)
+{
+       if (__pOptionsList != null)
+       {
+               return __pOptionsList->GetCount();
+       }
+       return 0;
+}
+
+ListItemBase*
+CallOptionPopup::CreateItem(int index, int itemWidth)
+{
+       int elementId = ANSERWING_OPTION_HOLD_SINGLE_CALL;
+       String* strText = static_cast<String*>(__pOptionsList->GetAt(index));
+       ListAnnexStyle style = LIST_ANNEX_STYLE_NORMAL;
+       CustomItem* pItem = new CustomItem();
+       pItem->Construct(Dimension(itemWidth, W_LIST_ITEM), style);
+       if (__pOptionsList->GetCount() == 2)
+       {
+               if(index == 1)
+               {
+                       elementId = ANSERWING_OPTION_END_SINGLE_CALL;
+               }
+       }
+       else
+       {
+               elementId = ANSERWING_OPTION_REPLACE_ACTIVE_CALL;
+               if(index == 1)
+               {
+                       elementId = ANSERWING_OPTION_REPLACE_HELD_CALL;
+               }
+               else if(index == 2)
+               {
+                       elementId = ANSERWING_OPTION_END_ALL_CALLS;
+               }
+       }
+       pItem->AddElement(Rectangle(HORIZONTAL_PADDING, 0, W_POPUP - HORIZONTAL_PADDING, H_LIST_ITEM), elementId, *strText);
+       return pItem;
+}
+
+bool
+CallOptionPopup::DeleteItem(int index, ListItemBase* pItem, int itemWidth)
+{
+       delete pItem;
+       pItem = null;
+       return true;
+}
+
+void
+CallOptionPopup::OnActionPerformed(const Control& source, int actionId)
+{
+       switch (actionId)
+       {
+       case IDA_BUTTON_CANCEL_OPTIONS_POPUP:
+       {
+               Popup::SetShowState(false);
+               __popupListener.OnItemSelected(IDA_BUTTON_CANCEL_OPTIONS_POPUP);
+       }
+       break;
+
+       default:
+               break;
+       }
+}
diff --git a/src/CallPanelFactory.cpp b/src/CallPanelFactory.cpp
new file mode 100644 (file)
index 0000000..38ef819
--- /dev/null
@@ -0,0 +1,45 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file    CallPanelFactory.cpp
+ * @brief   The Panel factory for Dial application
+ */
+
+#include "CallPanelFactory.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+
+
+
+PanelFactory::PanelFactory(void)
+{
+}
+
+PanelFactory::~PanelFactory(void)
+{
+}
+
+Panel*
+PanelFactory::CreatePanelN(const String& panelId, const SceneId& sceneId)
+{
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       AppAssert(pSceneManager);
+       Panel* pNewPanel = null;
+       return pNewPanel;
+}
diff --git a/src/CallPresentationModel.cpp b/src/CallPresentationModel.cpp
new file mode 100644 (file)
index 0000000..89650f4
--- /dev/null
@@ -0,0 +1,647 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file       CallCallPresentationModel.cpp
+ * @brief      Call Presentation model class
+ */
+#include <FApp.h>
+#include <FUi.h>
+#include <FMedia.h>
+#include "CallApp.h"
+#include "CallActiveCallForm.h"
+#include "CallInfo.h"
+#include "CallPresentationModel.h"
+#include "CallSettingsPresentationModel.h"
+#include "CallConfCallerListForm.h"
+#include "CallTelephonyManager.h"
+#include "CallSceneRegister.h"
+#include "CallTypes.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::App;
+using namespace Tizen::Graphics;
+using namespace Tizen::Media;
+using namespace Tizen::Social;
+using namespace Tizen::Ui::Scenes;
+
+CallPresentationModel* CallPresentationModel::__pInstance = null;
+
+CallPresentationModel::CallPresentationModel(void)
+{
+       __pTelephonyMgr = null;
+       __pTelEventListener = null;
+       __pSettingsPresentor = null;
+       __isMessageAppControlRunning = false;
+       __isDialAppControlRunning = false;
+}
+
+CallPresentationModel::~CallPresentationModel(void)
+{
+       __pTelephonyMgr = null;
+       __pSettingsPresentor = null;
+}
+
+void
+CallPresentationModel::CreateInstance(void)
+{
+       __pInstance = new (std::nothrow) CallPresentationModel();
+       result r = __pInstance->Construct();
+       if(IsFailed(r))
+       {
+               delete __pInstance;
+               __pInstance = null;
+               return;
+       }
+
+       std::atexit(DestroyInstance);
+}
+
+CallPresentationModel*
+CallPresentationModel::GetInstance(void)
+{
+       if (__pInstance == null)
+       {
+               CreateInstance();
+       }
+       return __pInstance;
+}
+
+void
+CallPresentationModel::DestroyInstance(void)
+{
+       if (__pInstance != null)
+       {
+               delete __pInstance;
+               __pInstance = null;
+       }
+}
+
+result
+CallPresentationModel::Construct(void)
+{
+       //Fetch Telephony Manager
+       __pTelephonyMgr = TelephonyManager::GetInstance(this);
+       __pSettingsPresentor = SettingsPresentationModel::GetInstance();
+       return E_SUCCESS;
+}
+
+void
+CallPresentationModel::SetTelEventListener(ITelephonyEventListener* pTelEventListener)
+{
+       //set form as telephony event listener
+       __pTelEventListener = pTelEventListener;
+}
+
+void
+CallPresentationModel::DialCall(String& contactNumber, bool isEmergency)
+{
+       int errorCode = ERROR_NONE;
+       //Check if Telephony Manager is initialized
+       TryCatch(__pTelephonyMgr != null, (errorCode = ERROR_TAPI_INIT_FAILED), "TAPI initialization failed");
+
+       //check if phone is in flight mode
+       if(__pSettingsPresentor->GetFlightModeStatus() == true)
+       {
+               __pTelEventListener->HandleTelephonyError(ERROR_FLIGHT_MODE_SET);
+               return;
+       }
+       //setup outgoing call
+       errorCode = __pTelephonyMgr->SetupMoCall(contactNumber, isEmergency);
+       TryCatch(errorCode == ERROR_NONE,,"Error occurred while setup MO call");
+       if(__pSettingsPresentor != null)
+       {
+               __pSettingsPresentor->SetCallState(CALL_STATE_CALL_VOICE_CONNECTING);
+       }
+       return;
+
+CATCH:
+       __pTelEventListener->HandleTelephonyError(errorCode);
+}
+
+void
+CallPresentationModel::EndActiveCall(Long callHandle)
+{
+       if(__pTelephonyMgr != null)
+       {
+               __pTelephonyMgr->EndActiveCall(callHandle);
+       }
+}
+
+void
+CallPresentationModel::EndDialingCall(String& contactNumber)
+{
+       if(__pTelephonyMgr != null)
+       {
+               __pTelephonyMgr->EndDialingCall(contactNumber);
+       }
+}
+
+bool
+CallPresentationModel::EndConferenceCall(void)
+{
+       result r = __pTelephonyMgr->EndConferenceCall();
+       if (IsFailed(r))
+       {
+               //TODO: send proper error code
+               __pTelEventListener->HandleTelephonyError(ERROR_GENERAL);
+               return false;
+       }
+       return true;
+}
+
+void
+CallPresentationModel::EndAllCall(void)
+{
+       if(__pTelephonyMgr != null)
+       {
+               __pTelephonyMgr->EndAllCalls();
+       }
+}
+bool
+CallPresentationModel::HoldCall(Tizen::Base::Long callHandle)
+{
+       result r = __pTelephonyMgr->HoldCall(callHandle, true);
+       return (!IsFailed(r));
+}
+
+bool
+CallPresentationModel::UnHoldCall(Tizen::Base::Long callHandle)
+{
+       result r = __pTelephonyMgr->HoldCall(callHandle, false);
+       return (!IsFailed(r));
+}
+
+bool
+CallPresentationModel::HoldConferenceCall(void)
+{
+       result r = __pTelephonyMgr->HoldConferenceCall(true);
+       return (!IsFailed(r));
+}
+
+bool
+CallPresentationModel::ActivateConferenceCall(void)
+{
+       result r = __pTelephonyMgr->HoldConferenceCall(false);
+       return (!IsFailed(r));
+}
+
+void
+CallPresentationModel::JoinCall(void)
+{
+       result r = __pTelephonyMgr->JoinCall();
+       if (IsFailed(r))
+       {
+               __pTelEventListener->HandleTelephonyError(ERROR_JOIN_FAILED);
+       }
+}
+
+void
+CallPresentationModel::SwapCalls(void)
+{
+       result r = __pTelephonyMgr->SwapCalls();
+       if (IsFailed(r))
+       {
+               __pTelEventListener->HandleTelephonyError(ERROR_SWAP_FAILED);
+       }
+}
+
+bool
+CallPresentationModel::SetMuteStatus(bool setMute)
+{
+       result r = __pTelephonyMgr->SetMuteStatus(setMute);
+       return (!IsFailed(r));
+}
+
+bool
+CallPresentationModel::IsCallMuted(void)
+{
+       return __pTelephonyMgr->IsCallMuted();
+}
+
+bool
+CallPresentationModel::SetSpeakerStatus(bool setSpeaker)
+{
+       result r = __pTelephonyMgr->SetSpeakerStatus(setSpeaker);
+       return (!IsFailed(r));
+}
+
+bool
+CallPresentationModel::IsSpeakerOn(void)
+{
+       return __pTelephonyMgr->IsSpeakerOn();
+}
+void
+CallPresentationModel::SendDTMFSignal(String& textToBeSent)
+{
+       __pTelephonyMgr->SendCallDTMF(textToBeSent);
+}
+
+CallInfo*
+CallPresentationModel::GetConferenceCallInfoN(void)
+{
+       return __pTelephonyMgr->GetConferenceCallInfoN();
+}
+
+void
+CallPresentationModel::SplitFromConference(SplitConfCallerCmdIds splitCallerCmdId, IListT<CallInfo>* pConfCallList)
+{
+       int callIndex = -1;
+       CallInfo callToBeSpli;
+       switch (splitCallerCmdId)
+       {
+       case IDA_SPLIT_CALLER1:
+               callIndex = 0;
+               break;
+
+       case IDA_SPLIT_CALLER2:
+               callIndex = 1;
+               break;
+
+       case IDA_SPLIT_CALLER3:
+               callIndex = 2;
+               break;
+
+       case IDA_SPLIT_CALLER4:
+               callIndex = 3;
+               break;
+
+       case IDA_SPLIT_CALLER5:
+               callIndex = 4;
+               break;
+
+       default:
+       break;
+       }
+
+       result r = pConfCallList->GetAt(callIndex, callToBeSpli);
+       TryCatch(r == E_SUCCESS,,"conf. call list corrupted");
+       //split single call from conference
+       r = __pTelephonyMgr->SplitFromConference(callToBeSpli.GetCallHandle()->ToLong());
+       TryCatch(r == E_SUCCESS,,"Split from conf. call failed");
+       return;
+
+CATCH:
+       __pTelEventListener->HandleTelephonyError(ERROR_SPLIT_FROM_CONFERENCE_FAILED);
+       return;
+}
+
+void
+CallPresentationModel::EndCallFromConference(EndConfCallerCmdIds endCallerCmdId, IListT<CallInfo>* pConfCallList)
+{
+       int callIndex = -1;
+       CallInfo callToBeEnded;
+       switch (endCallerCmdId)
+       {
+       case IDA_END_CALLER1:
+               callIndex = 0;
+               break;
+
+       case IDA_END_CALLER2:
+               callIndex = 1;
+               break;
+
+       case IDA_END_CALLER3:
+               callIndex = 2;
+               break;
+
+       case IDA_END_CALLER4:
+               callIndex = 3;
+               break;
+
+       case IDA_END_CALLER5:
+               callIndex = 4;
+               break;
+
+       default:
+       break;
+       }
+
+       result r = pConfCallList->GetAt(callIndex, callToBeEnded);
+       TryCatch(r == E_SUCCESS,,"conference call list corrupted");
+       //end single call
+       r = __pTelephonyMgr->EndFromConference(callToBeEnded.GetCallHandle()->ToLong());
+       TryCatch(r == E_SUCCESS,,"End single call from conference call failed");
+
+       return;
+
+CATCH:
+       __pTelEventListener->HandleTelephonyError(ERROR_END_CALL_FAILED);
+       return;
+}
+
+bool
+CallPresentationModel::IsSplitAllowed(void)
+{
+       return __pTelephonyMgr->IsSplitAllowed();
+}
+
+void
+CallPresentationModel::AcceptIncomingCall(CallAnsweringOptions answerOptions,int callHandle)
+{
+       result r = E_FAILURE;
+       if (answerOptions == ANSERWING_OPTION_ACCEPT_CALL)
+       {
+               r = __pTelephonyMgr->AnswerCall(callHandle, true);
+       }
+       else
+       {
+               r = __pTelephonyMgr->AcceptCall(answerOptions,callHandle);
+       }
+       if (IsFailed(r))
+       {
+               __pTelEventListener->HandleTelephonyError(ERROR_GENERAL);
+       }
+}
+
+IListT<CallInfo>*
+CallPresentationModel::GetCallListN(void)
+{
+       return __pTelephonyMgr->GetCallListN();
+}
+
+
+bool
+CallPresentationModel::RejectCall(int callHandle, bool sendMsg, const String& contactNumber)
+{
+       result r = __pTelephonyMgr->AnswerCall(callHandle, false);
+       if (IsFailed(r))
+       {
+               __pTelEventListener->HandleTelephonyError(ERROR_GENERAL);
+               return false;
+       }
+
+       if (sendMsg == true)
+       {
+               //launch message
+               result r = E_SUCCESS;
+               HashMap extraData;
+               extraData.Construct();
+
+               extraData.Add(new (std::nothrow) String(MESSAGE_TYPE), new (std::nothrow) String(MESSAGE_SMS_TYPE));
+               extraData.Add(new (std::nothrow) String(MESSAGE_TO), new (std::nothrow) String(contactNumber));
+
+               AppControl* pAc = AppManager::FindAppControlN(PROVIDER_ID_MESSAGE, OPERATION_ID_COMPOSE);
+               if (pAc != null)
+               {
+                       r = pAc->Start(null, null, &extraData, this);
+                       __isMessageAppControlRunning = true;
+                       delete pAc;
+               }
+
+               extraData.RemoveAll(true);
+       }
+       return true;
+}
+
+void
+CallPresentationModel::OnAppControlCompleteResponseReceived(const AppId& appId, const String& operationId, AppCtrlResult appControlResult, const IMap* pExtraData)
+{
+       if (__isMessageAppControlRunning == true)
+       {
+               //This comes here, when Message AppControl is finished working.
+               __isMessageAppControlRunning = false;
+               //Check if this was the last call, then terminate application.
+               //And if any calls are active, then those cases are already handled from Other places.
+               if( GetCurrentCallCount() == 0)
+               {
+                       CallApp* pPhoneApp = static_cast<CallApp*>(UiApp::GetInstance());
+                       pPhoneApp->Terminate();
+               }
+       }
+       if(appId.Equals(PROVIDER_ID_PHONE,false) == true &&  operationId.Equals(OPERATION_ID_DIAL,false) == true)
+       {
+               __isDialAppControlRunning = false;
+
+               if(appControlResult == APP_CTRL_RESULT_SUCCEEDED)
+               {
+                       String* pKey = new (std::nothrow) String(PARAM_PHONE_NUMBER);
+                       if (pExtraData->ContainsKey(*pKey) == true)
+                       {
+                               const String* pPhoneNumber = static_cast<const String*>(pExtraData->GetValue(*pKey));
+                               if(pPhoneNumber != null && pPhoneNumber->IsEmpty() == false)
+                               {
+                                       AddCall(*pPhoneNumber);
+                               }
+
+                       }
+
+               }
+
+       }
+}
+
+void
+CallPresentationModel::AddCall(const String& phoneNumber)
+{
+       ArrayList* pLaunchArgs = null;
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       int currentActiveCallCount = GetCurrentCallCount();
+       if(currentActiveCallCount <= 1)
+       {
+               //make an outgoing call with given number
+               String* contactTxt = new (std::nothrow) String(phoneNumber);
+               pLaunchArgs =  new (std::nothrow) ArrayList(SingleObjectDeleter);
+               pLaunchArgs->Construct();
+               pLaunchArgs->Add(contactTxt);
+               bool isEmergencyCall = IsEmergencyNumber(*contactTxt, true);
+
+               SceneId nextScene = IDSCN_SCENE_OUTCALL;
+               if (isEmergencyCall)
+               {
+                       nextScene = IDSCN_SCENE_OUT_EMERGENCYCALL;
+               }
+               pSceneManager->GoForward( ForwardSceneTransition( nextScene), pLaunchArgs);
+
+       }
+}
+
+int
+CallPresentationModel::GetCurrentCallCount(void)
+{
+       return __pTelephonyMgr->GetCurrentCallCount();
+}
+
+bool
+CallPresentationModel::CheckSimInitializationIsCompleted()
+{
+       result r = E_FAILURE;
+       if(__pTelephonyMgr != null)
+       {
+               r = __pTelephonyMgr->CheckIfMOCallIsPossible();
+       }
+       return (!IsFailed(r));
+}
+
+bool
+CallPresentationModel::IsEmergencyNumber(const Tizen::Base::String& phoneNumber, bool isSimInitialized)
+{
+       return __pTelephonyMgr->CheckIfMOCallIsEmergency(phoneNumber, isSimInitialized);
+}
+
+void
+CallPresentationModel::StartAlert(CallInfo& incomingCallInfo)
+{
+       //Adding incoming call sate setting here
+       if(__pSettingsPresentor != null)
+       {
+               __pSettingsPresentor->SetCallState(CALL_STATE_CALL_VOICE_CONNECTING);
+       }
+       __pTelephonyMgr->StartAlert(incomingCallInfo);
+}
+
+void
+CallPresentationModel::StopAlert(void)
+{
+       __pTelephonyMgr->StopAlert();
+}
+
+Contact*
+CallPresentationModel::GetContactN(const String& phoneNumber)
+{
+       return __pTelephonyMgr->GetContactN(phoneNumber);
+}
+
+CallInfo*
+CallPresentationModel::FetchIncomingCallDetailsN(const String& callHandle, const String& contactNumber)
+{
+
+       return __pTelephonyMgr->FetchIncomingCallHandleN(callHandle, contactNumber);
+}
+
+bool
+CallPresentationModel::CheckIncomingCallToBeRejected(CallInfo* pIncomingCallInfo)
+{
+       return __pTelephonyMgr->CheckIncomingCallToBeRejected(pIncomingCallInfo);
+}
+
+/////////////////////////////////////////////////////////////////
+/////  Event Listener methods from ITelephonyEventListener  /////
+/////////////////////////////////////////////////////////////////
+void
+CallPresentationModel::HandleCallConnected(Tizen::Base::Collection::IListT<CallInfo>& pCallList)
+{
+       if (__pTelEventListener != null)
+       {
+               __pTelEventListener->HandleCallConnected(pCallList);
+       }
+       if(__pSettingsPresentor != null)
+       {
+               __pSettingsPresentor->SetCallState(CALL_STATE_CALL_VOICE_ACTIVE);
+       }
+}
+
+void
+CallPresentationModel::HandleCallDisconnected(bool isLastCall, Tizen::Base::Collection::IListT<CallInfo>& pCallList)
+{
+       if (isLastCall == true)
+       {
+               SetSpeakerStatus(false);
+               SetMuteStatus(false);
+               if(__pSettingsPresentor != null)
+               {
+                       __pSettingsPresentor->SetCallState(CALL_STATE_CALL_OFF);
+               }
+       }
+       else
+       {
+               if(__pSettingsPresentor != null)
+               {
+                       __pSettingsPresentor->SetCallState(CALL_STATE_CALL_VOICE_ACTIVE);
+               }
+       }
+       //Defer from sending call disconnected event to form, in case Msg AppControl is running,
+       //to avoid PhoneApp from going to EndCall form, where it shows for 3 sec. and automatically closes.
+       if (__pTelEventListener != null && __isMessageAppControlRunning == false)
+       {
+               __pTelEventListener->HandleCallDisconnected(isLastCall, pCallList);
+       }
+
+}
+
+void
+CallPresentationModel::HandleConferenceCall(CallInfo& pCallInfo)
+{
+       if (__pTelEventListener != null)
+       {
+               __pTelEventListener->HandleConferenceCall(pCallInfo);
+       }
+}
+
+void
+CallPresentationModel::HandleIncomingCall(CallInfo& pCallInfo)
+{
+       AppLogDebug("Error - This will never come here. Since, now we are getting incoming call event through AppControl!!");
+}
+
+void
+CallPresentationModel::HandleCallSwapOccured(Tizen::Base::Collection::IListT<CallInfo>& pCallList)
+{
+       if (__pTelEventListener != null)
+       {
+               __pTelEventListener->HandleCallSwapOccured(pCallList);
+       }
+}
+
+void
+CallPresentationModel::HandleConferenceChange(void)
+{
+       if (__pTelEventListener != null)
+       {
+               __pTelEventListener->HandleConferenceChange();
+       }
+}
+
+void
+CallPresentationModel::HandleTelephonyError(int errorCode)
+{
+       if (__pTelEventListener != null)
+       {
+               __pTelEventListener->HandleTelephonyError(errorCode);
+       }
+}
+
+
+result
+CallPresentationModel::LaunchDialAppControl()
+{
+       result r = E_SUCCESS;
+       AppControl* pAppControl = null;
+
+       if(__isDialAppControlRunning == true)
+       {
+               //Do not allow another app control if already running
+               return r;
+       }
+
+       HashMap extraData;
+       extraData.Construct();
+       extraData.Add(new (std::nothrow) String(PARAM_PHONE_NUMBER), new (std::nothrow) String(L""));
+
+       pAppControl = AppManager::FindAppControlN(PROVIDER_ID_PHONE, OPERATION_ID_DIAL);
+       if (pAppControl != null)
+       {
+               r = pAppControl->Start(null, null, &extraData, this);
+               __isDialAppControlRunning = true;
+       }
+
+       extraData.RemoveAll(true);
+
+       return r;
+
+
+}
diff --git a/src/CallRejectInfo.cpp b/src/CallRejectInfo.cpp
new file mode 100644 (file)
index 0000000..80b90c2
--- /dev/null
@@ -0,0 +1,69 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file       CallCallRejectInfo.cpp
+ * @brief      Call Reject info class
+ */
+#include "CallRejectInfo.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+
+CallRejectInfo::CallRejectInfo(void)
+{
+}
+
+CallRejectInfo::~CallRejectInfo(void)
+{
+}
+
+bool
+CallRejectInfo::operator ==(const CallRejectInfo& rhs) const
+{
+       /*return (this->rowId == rhs.rowId);*/
+       if ((this->phoneNumber == rhs.phoneNumber)
+                       && (this->rejectCondition == rhs.rejectCondition))
+       {
+               return true;
+       }
+       return false;
+}
+
+bool
+CallRejectInfo::operator !=(const CallRejectInfo& rhs) const
+{
+       /*return (!(this->rowId == rhs.rowId));*/
+       if ((this->phoneNumber == rhs.phoneNumber)
+                       && (this->rejectCondition == rhs.rejectCondition))
+       {
+               return false;
+       }
+       return true;
+}
+
+CallRejectInfo&
+CallRejectInfo::operator =(const CallRejectInfo& rhs)
+{
+       if (this != null)
+       {
+               this->rowId = rhs.rowId;
+               this->phoneNumber.Append(rhs.phoneNumber);
+               this->rejectCondition = rhs.rejectCondition;
+               this->isActivated = rhs.isActivated;
+       }
+       return *this;
+}
diff --git a/src/CallSceneRegister.cpp b/src/CallSceneRegister.cpp
new file mode 100644 (file)
index 0000000..2601fb2
--- /dev/null
@@ -0,0 +1,74 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file    CallSceneRegister.cpp
+ * @brief   Scene register file
+ */
+#include <FUi.h>
+#include "CallSceneRegister.h"
+#include "CallPhoneFormFactory.h"
+#include "CallPanelFactory.h"
+#include "CallTypes.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Ui;
+using namespace Tizen::Ui::Controls;
+using namespace Tizen::Ui::Scenes;
+
+
+SceneRegister::SceneRegister(void)
+{
+}
+
+SceneRegister::~SceneRegister(void)
+{
+}
+
+result
+SceneRegister::RegisterAllScenes(void)
+{
+       result r = E_SUCCESS;
+       SceneManager* pSceneManager = SceneManager::GetInstance();
+       AppAssert(pSceneManager != null);
+
+       //Register factory methods for form & panel creation
+       static FormFactory formFactory;
+       static PanelFactory panelFactory;
+       r |= pSceneManager->RegisterFormFactory(formFactory);
+       r |= pSceneManager->RegisterPanelFactory(panelFactory);
+
+       //Voice Call Scenes
+       r |= pSceneManager->RegisterScene(IDSCN_SCENE_OUTCALL, IDL_FORM_OUTCALL, L"");
+       AppLogDebug("%d",r);
+       r |= pSceneManager->RegisterScene(IDSCN_SCENE_OUT_EMERGENCYCALL, IDL_FORM_OUT_EMERGENCYCALL, L"");
+       AppLogDebug("%d",r);
+       r |= pSceneManager->RegisterScene(IDSCN_SCENE_ACTIVECALL, IDL_FORM_ACTIVECALL, L"");
+       AppLogDebug("%d",r);
+       r |= pSceneManager->RegisterScene(IDSCN_SCENE_ACTIVE_EMERGENCYCALL, IDL_FORM_ACTIVE_EMERGENCYCALL, L"");
+       AppLogDebug("%d",r);
+       r |= pSceneManager->RegisterScene(IDSCN_SCENE_MULTIPLEACTIVECALL, IDL_FORM_MULTIPLEACTIVECALL, L"");
+       AppLogDebug("%d",r);
+       r |= pSceneManager->RegisterScene(IDSCN_SCENE_INCOMINGCALL, IDL_FORM_INCOMINGCALL, L"");
+       AppLogDebug("%d",r);
+       r |= pSceneManager->RegisterScene(IDSCN_SCENE_CONFCALL, IDL_FORM_CONFCALL, L"");
+       AppLogDebug("%d",r);
+       r |= pSceneManager->RegisterScene(IDSCN_SCENE_CONFCALLLIST, IDL_FORM_CONFCALLLIST, L"");
+       AppLogDebug("%d",r);
+       r |= pSceneManager->RegisterScene(IDSCN_SCENE_ENDCALL, IDL_FORM_ENDCALL, L"");
+
+       return r;
+}
diff --git a/src/CallSettingDataService.cpp b/src/CallSettingDataService.cpp
new file mode 100644 (file)
index 0000000..ffdf73f
--- /dev/null
@@ -0,0 +1,255 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file    CallCallSettingDataService.cpp
+ * @brief      Call Database class
+ */
+
+#include <FApp.h>
+#include <FSocial.h>
+#include <FIo.h>
+#include "CallSettingDataService.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Io;
+using namespace Tizen::App;
+using namespace Tizen::Social;
+
+static const wchar_t* REJECT_DATABASE_PATH = L"/opt/usr/apps/zktdpemtmw/";
+
+CallSettingDataService* CallSettingDataService::__pCallSettingDataService = null;
+Database* CallSettingDataService::__pDatabase = null;
+
+CallSettingDataService::CallSettingDataService(void)
+: __strDbName(String(REJECT_DATABASE_PATH) + L"data/CallRejectInfoListDataBase")
+{
+       __pStmt = null;
+       __pEnum = null;
+
+       return;
+}
+
+CallSettingDataService::~CallSettingDataService(void)
+{
+       if (__pDatabase != null)
+       {
+               delete __pDatabase;
+               __pDatabase = null;
+       }
+       __pCallSettingDataService = null;
+       return;
+}
+
+CallSettingDataService*
+CallSettingDataService::CreateInstance(void)
+{
+       if (__pCallSettingDataService == null)
+       {
+               __pCallSettingDataService = new (std::nothrow) CallSettingDataService();
+       }
+       return __pCallSettingDataService;
+}
+result
+CallSettingDataService::OpenDatabase(void)
+{
+       result r = E_SUCCESS;
+
+       // create the database if it doesn't exist
+       if (__pDatabase != null)
+       {
+               return E_OBJ_ALREADY_EXIST;
+       }
+       __pDatabase = new (std::nothrow) Database();
+       r = __pDatabase->Construct(__strDbName, true);
+       TryCatch(r == E_SUCCESS, , "CallSettingDataService::OpenDatabase() database construct failed");
+
+       r = CreateCallRejectTableDatabase();
+       //      TryCatch(r == E_SUCCESS, , "CallSettingDataService::OpenDatabase() call reject Create Table failed");
+       r = CreateSpeedDialTableDatabase();
+       //      TryCatch(r == E_SUCCESS, , "CallSettingDataService::OpenDatabase() speed dial Create Table failed");
+
+       return r;
+
+       CATCH:
+       delete __pDatabase;
+       __pDatabase = null;
+       return r;
+}
+
+result
+CallSettingDataService::CreateCallRejectTableDatabase(void)
+{
+       String sqlQuery;
+       result r = E_SUCCESS;
+
+       sqlQuery.Append(L"CREATE TABLE IF NOT EXISTS CallRejectInfoTable(id INTEGER PRIMARY KEY AUTOINCREMENT,phonenumber TEXT,rejectcondition INT,activated INT)");
+
+       r = __pDatabase->ExecuteSql(sqlQuery, true);
+       TryCatch(r == E_SUCCESS, , "CallSettingDataService::CreateCallRejectInfoTableDatabase() Create Table failed");
+
+       return r;
+
+       CATCH:
+       return r;
+}
+
+result
+CallSettingDataService::CreateSpeedDialTableDatabase(void)
+{
+       String sqlQuery;
+       result r = E_SUCCESS;
+
+       sqlQuery.Append(L"CREATE TABLE IF NOT EXISTS SpeedDialTable(id INTEGER PRIMARY KEY AUTOINCREMENT,contactInfo TEXT,keyMappedTo INT)");
+
+       r = __pDatabase->ExecuteSql(sqlQuery, true);
+       TryCatch(r == E_SUCCESS, , "CallSettingDataService::CreateCallRejectInfoTableDatabase() Create Table failed");
+
+       return r;
+
+       CATCH:
+       return r;
+}
+
+result
+CallSettingDataService::CloseDatabase(void)
+{
+       if (__pEnum != null)
+       {
+               delete __pEnum;
+               __pEnum = null;
+       }
+       if (__pStmt != null)
+       {
+               delete __pStmt;
+               __pStmt = null;
+       }
+       if (__pDatabase != null)
+       {
+               delete __pDatabase;
+               __pDatabase = null;
+       }
+
+       return E_SUCCESS;
+}
+
+
+bool
+CallSettingDataService::IsCallToBeRejected(String& phoneNumber)
+{
+       AppLogDebug("Enter");
+       bool isCallToBeRejected  = false;
+       String statement;
+       __pStmt = null;
+       __pEnum = null;
+       result r = E_SUCCESS;
+       __pDatabase->BeginTransaction();
+
+       //statement.Append(L"SELECT * FROM CallRejectInfoTable WHERE phonenumber LIKE ?");
+       statement.Append(L"SELECT * FROM CallRejectInfoTable WHERE activated=?");
+
+       __pStmt = __pDatabase->CreateStatementN(statement);
+       r = GetLastResult();
+       TryCatch(r == E_SUCCESS, , "CallSettingDataService::SearchFromDataBase CreateStatementN failed");
+
+       //__pStmt->BindString(0, phoneNumber);
+       if (__pStmt != null)
+       {
+               __pStmt->BindInt(0,(int)true);
+               __pEnum = __pDatabase->ExecuteStatementN(*__pStmt);
+       }
+       r = GetLastResult();
+       TryCatch(r == E_SUCCESS, , "CallSettingDataService::SearchFromDataBaseN search failed");
+
+       //check if the query returned any result and then iterate through the results
+       if (__pEnum != null)
+       {
+               while (__pEnum->MoveNext() == E_SUCCESS)
+               {
+                       CallRejectInfo* pCallRejectInfoItem = new (std::nothrow) CallRejectInfo;
+                       int activateflag;
+                       int rejectCondition;
+                       __pEnum->GetIntAt(0, pCallRejectInfoItem->rowId);
+                       __pEnum->GetStringAt(1, pCallRejectInfoItem->phoneNumber);
+                       __pEnum->GetIntAt(2, rejectCondition);
+                       __pEnum->GetIntAt(3, activateflag);
+                       pCallRejectInfoItem->rejectCondition = (CallRejectMatchCondition)rejectCondition;
+                       pCallRejectInfoItem->isActivated = (bool)activateflag;
+                       if (CheckRejectCondition(phoneNumber, *pCallRejectInfoItem) == true)
+                       {
+                               delete pCallRejectInfoItem;
+                               isCallToBeRejected = true;
+                               break;
+                       }
+                       delete pCallRejectInfoItem;
+               }
+       }
+       __pDatabase->CommitTransaction();
+
+       if (__pStmt != null)
+       {
+               delete __pStmt;
+               __pStmt = NULL;
+       }
+       if (__pEnum != null)
+       {
+               delete __pEnum;
+               __pEnum = NULL;
+       }
+       AppLogDebug("%d",isCallToBeRejected);
+       return isCallToBeRejected;
+
+       CATCH:
+       return isCallToBeRejected;
+}
+
+bool
+CallSettingDataService::CheckRejectCondition(String& phoneNumber, CallRejectInfo& callRejectInfo)
+{
+       bool isCallToBeRejected  = false;
+       switch (callRejectInfo.rejectCondition)
+       {
+       case CALL_REJECT_MATCH_EXACTLY:
+       {
+               if (callRejectInfo.phoneNumber.CompareTo(phoneNumber) == 0)
+               {
+                       isCallToBeRejected = true;
+               }
+       }
+       break;
+       case CALL_REJECT_MATCH_START:
+       {
+               isCallToBeRejected = phoneNumber.StartsWith(callRejectInfo.phoneNumber, 0);
+       }
+       break;
+       case CALL_REJECT_MATCH_END:
+       {
+               isCallToBeRejected = phoneNumber.EndsWith(callRejectInfo.phoneNumber);
+       }
+       break;
+       case CALL_REJECT_MATCH_INCLUDE:
+       {
+               isCallToBeRejected = phoneNumber.Contains(callRejectInfo.phoneNumber);
+       }
+       break;
+       default:
+               break;
+       }
+
+       return isCallToBeRejected;
+}
+
diff --git a/src/CallSettingsConstants.cpp b/src/CallSettingsConstants.cpp
new file mode 100644 (file)
index 0000000..85b7155
--- /dev/null
@@ -0,0 +1,93 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file    CallSettingsConstants.cpp
+ * @brief   Call setting tone form
+ */
+#include "CallSettingsConstants.h"
+
+using namespace Tizen::Graphics;
+
+
+// Dimensions used in List views //
+// menu item height
+const int H_LIST_HIDDENGROUP_ITEM = 1;
+const int H_LIST_NORMAL_MENU_ITEM = 112;
+const int H_LIST_DROPDOWN_MENU_ITEM = 128;
+const int H_LIST_MENU_SINGLELINE_HLPTXT_ITEM = 102;
+const int H_LIST_MENU_TWOLINE_HLPTXT_ITEM = 140;
+//text item height
+const int H_LIST_NORMAL_TXT_ITEM = 54;
+const int H_LIST_SUB_TXT_ITEM = 38;
+//Two line text for Drop down menu item
+const int H_LIST_DROPDOWN_TXT_ITEM = 52;
+//single line text
+const int X_LIST_MENU_TEXT_ITEM = 26;
+const int Y_LIST_MENU_TEXT_ITEM = 8;
+//Help text
+const int X_LIST_MENU_HLPTXT_ITEM = 26;
+const int Y_LIST_MENU_HLPTXT_ITEM = 8;
+//custom Item for Bg line
+const int Y_CUSTOM_BG_ELEMENT = 0;
+//Position for delete list item
+const int X_DEL_LIST_ELEMENT = 16;
+const int Y_DEL_LIST_ELEMENT = 0;
+
+// Dimensions for icons //
+//Expand icon for DropDown Menu Items
+const int W_EXPAND_ICON = 64;
+const int H_EXPAND_ICON = 64;
+const int W_SLIDER_ICON = 150;
+const int H_SLIDER_ICON = 64;
+//contact icon for Add Rejected Number view
+const int W_CONTACT_ICON = 128;
+const int H_CONTACT_ICON = 128;
+//Dimensions for custom bg line
+const int W_CUSTOM_BG_ELEMENT = 1;
+//Item Width for delete list
+const int W_DELETE_LIST_ITEM = 628;
+const int W_LEFT_HEADER_EXPAND_ITEMS = 8;
+
+const int FONT_SIZE_MAIN_TXT = 44;
+const int FONT_SIZE_SUB_TXT = 32;
+//Help text
+const int FONT_SIZE_HELP_TXT = 32;
+//Header, Footer icon
+const int W_HDR_FTR_ICON = 60;
+const int H_HDR_FTR_ICON = 60;
+//Processing Animation constants
+const int IDI_ANIM_DURATION = 500;
+const int IDI_ANIM_PROGRESS_COUNT = 30;
+
+
+//Settings UI contants
+//   Colors used in List views  //
+const unsigned int COLOR_GROUP_ITEM_BG = Color32<249, 249, 249>::Value;
+const unsigned int COLOR_LIST_MENU_ITEM = Color32<236, 240, 242>::Value;
+const unsigned int COLOR_SECONDDEPTH_ITEM_BG = Color32<215, 225, 232>::Value;
+const unsigned int COLOR_HELP_ITEM_BG = Color32<255, 255, 255, 0>::Value;
+const unsigned int COLOR_NORMAL_MAIN_TXT = Color32<102, 102, 102>::Value;
+const unsigned int COLOR_NORMAL_SUB_TXT = Color32<124, 124, 124>::Value;
+const unsigned int COLOR_PRESS_SUB_TXT = Color32<42, 137, 194>::Value;
+const unsigned int COLOR_PRESS_MAIN_TXT = Color32<249, 249, 249>::Value;
+const unsigned int COLOR_HELP_TXT = Color32<124, 124, 124>::Value;
+const unsigned int COLOR_LEFT_HEADER_EXPAND_ITEMS = Color32<108, 168, 199>::Value;
+//Main List Option text
+const unsigned int COLOR_MAIN_TXT = Color32<0, 0, 0>::Value;
+const unsigned int COLOR_NORMAL_ITEM_BG = Color32<249, 249, 249>::Value;
+const unsigned int COLOR_PRESS_ITEM_BG = Color32<42, 137, 194>::Value;
+const unsigned int COLOR_SELECTALL_ITEM_BG = Color32<215, 225, 232>::Value;
diff --git a/src/CallSettingsManager.cpp b/src/CallSettingsManager.cpp
new file mode 100644 (file)
index 0000000..2b262f3
--- /dev/null
@@ -0,0 +1,382 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file    CallSettingsManager.cpp
+ * @brief   Setting Manager class
+ */
+#include <libintl.h>
+#include <FApp.h>
+#include <FSocial.h>
+#include <FBaseColIList.h>
+#include "vconf.h"
+#include "vconf-internal-ciss-keys.h"
+#include "CallSettingsManager.h"
+#include "CallTypes.h"
+
+using namespace Tizen::App;
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Io;
+using namespace Tizen::Social;
+using namespace Tizen::System;
+
+SettingsManager* SettingsManager::__pInstance = null;
+
+SettingsManager::SettingsManager(void)
+       : __pTapiHandle(null)
+       , __pSettingsEventListener(null)
+       , __pCallSettingDataService(null)
+{
+
+}
+
+SettingsManager::~SettingsManager(void)
+{
+       //De-initialize the TAPI Library
+       if(__pTapiHandle != null)
+       {
+               tel_deinit(__pTapiHandle);
+       }
+       if (__pCallSettingDataService)
+       {
+               __pCallSettingDataService->CloseDatabase();
+               delete __pCallSettingDataService;
+       }
+       if (__pSettingsEventListener != null)
+       {
+               delete __pSettingsEventListener;
+       }
+       RemoveSystemEventListener();
+}
+
+void SettingsManager::CreateInstance(void)
+{
+       __pInstance = new (std::nothrow) SettingsManager();
+       result r = __pInstance->Construct();
+       if(IsFailed(r))
+       {
+               delete __pInstance;
+               __pInstance = null;
+               return;
+       }
+       std::atexit(&(SettingsManager::DestroyInstance));
+}
+
+void SettingsManager::DestroyInstance(void)
+{
+       delete __pInstance;
+}
+
+result
+SettingsManager::Construct(void)
+{
+       __pCallSettingDataService = CallSettingDataService::CreateInstance();
+       result r = __pCallSettingDataService->OpenDatabase();
+       if(IsFailed(r))
+       {
+               return E_FAILURE;
+       }
+       //initialize telephony
+       __pTapiHandle = tel_init(null);
+       SetCallState(CALL_STATE_CALL_OFF);
+       AddSystemEventListener();
+       return E_SUCCESS;
+}
+
+SettingsManager*
+SettingsManager::GetInstance(void)
+{
+       if (__pInstance == null)
+       {
+               CreateInstance();
+       }
+       return __pInstance;
+}
+
+void
+SettingsManager::AddSettingEventListener(ISettingsEventListener* pSettingsEventListener)
+{
+       if (__pSettingsEventListener == null)
+       {
+               __pSettingsEventListener = new (std::nothrow) ArrayListT<ISettingsEventListener*>();
+       }
+
+       //Add to listeners, if not already in list.
+       if ( (pSettingsEventListener != null)
+                       && !(__pSettingsEventListener->Contains(pSettingsEventListener)) )
+       {
+               __pSettingsEventListener->Add(pSettingsEventListener);
+       }
+}
+
+void
+SettingsManager::RemoveSettingEventListener(ISettingsEventListener* pSettingsEventListener)
+{
+       if ((__pSettingsEventListener != null) && (pSettingsEventListener != null)
+                       && __pSettingsEventListener->Contains(pSettingsEventListener))
+       {
+               __pSettingsEventListener->Remove(pSettingsEventListener);
+       }
+}
+
+bool
+SettingsManager::IsCallToBeRejected(String& phoneNumber)
+{
+       return __pCallSettingDataService->IsCallToBeRejected(phoneNumber);
+}
+
+bool
+SettingsManager::GetUnknownRejectStatus(void)
+{
+       int unknownRejectStatus = -1;
+
+       vconf_get_bool(VCONFKEY_CISSAPPL_AUTO_REJECT_UNKNOWN_BOOL, &unknownRejectStatus);
+
+       bool retVal = unknownRejectStatus;
+       return retVal;
+}
+
+void
+SettingsManager::NotifyForwardingEventListeners(ForwardResponseType responseType, bool isCallSuccessful, CallForwardCondition callFwdCondition, const Tizen::Base::String& callFwdNumber, bool isCallForwardActivated, int noReplyWaitTime)
+{
+       IEnumeratorT<ISettingsEventListener*>* pListenerEnum = null;
+       result r = E_FAILURE;
+       if (__pSettingsEventListener != null)
+       {
+               pListenerEnum = __pSettingsEventListener->GetEnumeratorN();
+               //TryReturn(pListenerEnum != null, GetLastResult(), "[%s] Propagated.", GetErrorMessage(GetLastResult()));
+
+               while ((r = pListenerEnum->MoveNext()) != E_OUT_OF_RANGE)
+               {
+                       ISettingsEventListener* pListener;
+                       r = pListenerEnum->GetCurrent(pListener);
+                       //TryCatch(r == E_SUCCESS, , "[%s] Propagated.", GetErrorMessage(r));
+                       if (responseType == SET_CALLFORWARD_RESPONSE)
+                       {
+                               pListener->HandleSetCallForwardResponse(isCallSuccessful, callFwdCondition, callFwdNumber, isCallForwardActivated, noReplyWaitTime);
+                       }
+                       else
+                       {
+                               pListener->HandleGetCallForwardResponse(isCallSuccessful, callFwdCondition, callFwdNumber, isCallForwardActivated, noReplyWaitTime);
+                       }
+               }
+       }
+}
+
+void
+SettingsManager::NotifyBarringEventListeners(BarringResponseType responseType, bool isCallSuccessful, CallBarringType callBarringType, bool isBarringActivated)
+{
+       IEnumeratorT<ISettingsEventListener*>* pListenerEnum = null;
+       result r = E_FAILURE;
+       if (__pSettingsEventListener != null)
+       {
+               pListenerEnum = __pSettingsEventListener->GetEnumeratorN();
+               //TryReturn(pListenerEnum != null, GetLastResult(), "[%s] Propagated.", GetErrorMessage(GetLastResult()));
+
+               while ((r = pListenerEnum->MoveNext()) != E_OUT_OF_RANGE)
+               {
+                       ISettingsEventListener* pListener;
+                       r = pListenerEnum->GetCurrent(pListener);
+                       //TryCatch(r == E_SUCCESS, , "[%s] Propagated.", GetErrorMessage(r));
+                       if (responseType == SET_CALLBARRING_RESPONSE)
+                       {
+                               pListener->HandleSetCallBarringResponse(isCallSuccessful, callBarringType, isBarringActivated);
+                       }
+                       else
+                       {
+                               pListener->HandleGetCallBarringResponse(isCallSuccessful, callBarringType, isBarringActivated);
+                       }
+               }
+       }
+}
+
+void
+SettingsManager::NotifyWaitingEventListeners(WaitingResponseType responseType, bool isCallSuccessful, bool isCallWaitingActivated)
+{
+       IEnumeratorT<ISettingsEventListener*>* pListenerEnum = null;
+       result r = E_FAILURE;
+       if (__pSettingsEventListener != null)
+       {
+               pListenerEnum = __pSettingsEventListener->GetEnumeratorN();
+               //TryReturn(pListenerEnum != null, GetLastResult(), "[%s] Propagated.", GetErrorMessage(GetLastResult()));
+
+               while ((r = pListenerEnum->MoveNext()) != E_OUT_OF_RANGE)
+               {
+                       ISettingsEventListener* pListener;
+                       r = pListenerEnum->GetCurrent(pListener);
+                       //TryCatch(r == E_SUCCESS, , "[%s] Propagated.", GetErrorMessage(r));
+                       if (responseType == SET_CALLWAITING_RESPONSE)
+                       {
+                               pListener->HandleSetCallWaitingResponse(isCallSuccessful, isCallWaitingActivated);
+                       }
+                       else
+                       {
+                               pListener->HandleGetCallWaitingResponse(isCallSuccessful, isCallWaitingActivated);
+                       }
+               }
+               delete pListenerEnum;
+       }
+}
+
+IMapT<int,String>*
+SettingsManager::GetRejectMessageListN(void)
+{
+       int messagesCount;
+       char* pMessage = null;
+       HashMapT<int,String> *pMessageMap = null;
+
+       int retval = vconf_get_int(VCONFKEY_CISSAPPL_REJECT_CALL_MSG_INT, &messagesCount);
+       if (retval == 0 && messagesCount > 0)
+       {
+               pMessageMap = new (std::nothrow) HashMapT<int,String>();
+               pMessageMap->Construct(messagesCount);
+               for (int index = 0; index < messagesCount; index++)
+               {
+                       int keyForMsg = index;
+                       String *pMessageStr = new (std::nothrow) String();
+                       switch (index)
+                       {
+                       case 0:
+                       {
+                               pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG1_STR);
+                       }
+                       break;
+
+                       case 1:
+                       {
+                               pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG2_STR);
+                       }
+                       break;
+
+                       case 2:
+                       {
+                               pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG3_STR);
+                       }
+                       break;
+
+                       case 3:
+                       {
+                               pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG4_STR);
+                       }
+                       break;
+
+                       case 4:
+                       {
+                               pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG5_STR);
+                       }
+                       break;
+
+                       case 5:
+                       {
+                               pMessage = vconf_get_str(VCONFKEY_CISSAPPL_USER_CREATE_MSG6_STR);
+                       }
+                       break;
+
+                       default:
+                       {
+                               delete pMessageMap;
+                               pMessageMap = null;
+                               return null;
+                       }
+                       break;
+                       }
+                       //todo:Chk if this is allowed outside the call settings library
+                       if((pMessage != null) && (String(pMessage).IsEmpty() == false))
+                       {
+                       bindtextdomain("ug-setting-call-efl", "/usr/ug/res/locale");
+                       pMessageStr->Append(dgettext("ug-setting-call-efl", pMessage));
+                       pMessageMap->Add(keyForMsg, *pMessageStr);
+               }
+       }
+       }
+       return pMessageMap;
+}
+
+result
+SettingsManager::SetCallState(CallState callState)
+{
+       AppLogDebug("Enter %d",callState);
+       result r = E_FAILURE;
+       int retVal = vconf_set_int(VCONFKEY_CALL_STATE, callState);
+       if (retVal == 0)
+       {
+               AppLogDebug("Success");
+               r = E_SUCCESS;
+       }
+       return r;
+}
+void
+SettingsManager::AddSystemEventListener(void)
+{
+       Tizen::System::SettingInfo::AddSettingEventListener(*this);
+}
+
+void
+SettingsManager::RemoveSystemEventListener(void)
+{
+       Tizen::System::SettingInfo::RemoveSettingEventListener(*this);
+}
+
+void
+SettingsManager::OnSettingChanged(Tizen::Base::String& key)
+{
+       AppLogDebug("Enter");
+       //Flight mode changed
+       if(key.Equals(String(SETTINGS_FLIGHT_MODE_STR)))
+       {
+               bool flightMode = false;
+               SettingInfo::GetValue(key, flightMode);
+               if(flightMode == true)
+               {
+                       // Notify if some active call is going on
+                       IEnumeratorT<ISettingsEventListener*>* pListenerEnum = null;
+                       result r = E_FAILURE;
+                       if (__pSettingsEventListener != null)
+                       {
+                               pListenerEnum = __pSettingsEventListener->GetEnumeratorN();
+                               //TryReturn(pListenerEnum != null, GetLastResult(), "[%s] Propagated.", GetErrorMessage(GetLastResult()));
+
+                               while ((r = pListenerEnum->MoveNext()) != E_OUT_OF_RANGE)
+                               {
+                                       ISettingsEventListener* pListener;
+                                       r = pListenerEnum->GetCurrent(pListener);
+                                       pListener->HandleFlightMode(true);
+
+                               }
+                       }
+
+               }
+       }
+}
+
+bool
+SettingsManager::GetFlightModeStatus(void)
+{
+    result r = E_SUCCESS;
+
+    String key(SETTINGS_FLIGHT_MODE_STR);
+    bool flightMode = false;
+
+    r = SettingInfo::GetValue(key, flightMode);
+    TryCatch(r == E_SUCCESS, , "GetFlightModeStatus: To get a value is failed");
+
+    return flightMode;
+
+   CATCH:
+    return flightMode;
+}
+
diff --git a/src/CallSettingsPresentationModel.cpp b/src/CallSettingsPresentationModel.cpp
new file mode 100644 (file)
index 0000000..f5e451f
--- /dev/null
@@ -0,0 +1,192 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file    CallSettingsPresentationModel.cpp
+ * @brief   Setting Presentation model
+ */
+#include "CallSettingsConstants.h"
+#include "CallSettingsManager.h"
+#include "CallSettingsPresentationModel.h"
+#include "CallPresentationModel.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Social;
+
+SettingsPresentationModel* SettingsPresentationModel::__pInstance = null;
+
+SettingsPresentationModel::SettingsPresentationModel()
+{
+       __pSettingsMgr = null;
+       __pSettingsEventListener = null;
+}
+
+SettingsPresentationModel::~SettingsPresentationModel()
+{
+}
+
+void
+SettingsPresentationModel::CreateInstance(void)
+{
+       __pInstance = new (std::nothrow) SettingsPresentationModel();
+       result r = __pInstance->Construct();
+       if(IsFailed(r))
+       {
+               delete __pInstance;
+               __pInstance = null;
+               return;
+       }
+       atexit(&(SettingsPresentationModel::DestroyInstance));
+}
+
+SettingsPresentationModel*
+SettingsPresentationModel::GetInstance(void)
+{
+       if (__pInstance == null)
+       {
+               CreateInstance();
+       }
+       return __pInstance;
+}
+
+void
+SettingsPresentationModel::DestroyInstance(void)
+{
+       if (__pInstance->__pSettingsMgr != null)
+       {
+               __pInstance->__pSettingsMgr->RemoveSettingEventListener(__pInstance);
+               __pInstance->__pSettingsMgr = null;
+       }
+       delete __pInstance;
+}
+
+result
+SettingsPresentationModel::Construct(void)
+{
+       //Construct Settings Manager
+       __pSettingsMgr = SettingsManager::GetInstance();
+       __pSettingsMgr->AddSettingEventListener(this);
+       return E_SUCCESS;
+}
+
+result
+SettingsPresentationModel::AddSettingEventListener(ISettingsEventListener* pSettingsEventListener)
+{
+       result r = E_FAILURE;
+       if (__pSettingsEventListener == null && pSettingsEventListener != null)
+       {
+               __pSettingsEventListener = pSettingsEventListener;
+               r = E_SUCCESS;
+       }
+       return r;
+}
+
+void
+SettingsPresentationModel::RemoveSettingEventListener(void)
+{
+       __pSettingsEventListener = null;
+}
+
+IMapT<int,String>*
+SettingsPresentationModel::GetRejectMessageListN(void)
+{
+       return __pSettingsMgr->GetRejectMessageListN();
+}
+
+
+bool
+SettingsPresentationModel::IsCallToBeRejected(Tizen::Base::String& phoneNumber)
+{
+       return __pSettingsMgr->IsCallToBeRejected(phoneNumber);
+}
+
+
+//////////////////////////////////////////////////
+//              Settings Event Listener Methods                //
+//////////////////////////////////////////////////
+
+void
+SettingsPresentationModel::HandleGetCallWaitingResponse(bool isCallSuccessful, bool callWaitingActivated)
+{
+       if (__pSettingsEventListener != null)
+       {
+               __pSettingsEventListener->HandleGetCallWaitingResponse(isCallSuccessful, callWaitingActivated);
+       }
+}
+
+void
+SettingsPresentationModel::HandleSetCallWaitingResponse(bool isCallSuccessful, bool isCallWaitingEnabled)
+{
+       if (__pSettingsEventListener != null)
+               {
+                       __pSettingsEventListener->HandleSetCallWaitingResponse(isCallSuccessful, isCallWaitingEnabled);
+               }
+}
+
+void
+SettingsPresentationModel::HandleGetCallForwardResponse(bool isCallSuccessful, CallForwardCondition callFwdCondition, const String& callFwdNumber, bool callForwardActivated, int noReplyWaitTime)
+{
+       if (__pSettingsEventListener != null)
+               {
+                       __pSettingsEventListener->HandleGetCallForwardResponse(isCallSuccessful, callFwdCondition, callFwdNumber, callForwardActivated, noReplyWaitTime);
+               }
+}
+
+void
+SettingsPresentationModel::HandleSetCallForwardResponse(bool isCallSuccessful, CallForwardCondition callFwdCondition, const String& callFwdNumber, bool isCallForwardActivated, int noReplyWaitTime)
+{
+       if (__pSettingsEventListener != null)
+               {
+                       __pSettingsEventListener->HandleSetCallForwardResponse(isCallSuccessful, callFwdCondition, callFwdNumber, isCallForwardActivated, noReplyWaitTime);
+               }
+}
+
+void
+SettingsPresentationModel::HandleGetCallBarringResponse(bool isCallSuccessful, CallBarringType callBarringType, bool isBarringActivated)
+{
+       if (__pSettingsEventListener != null)
+       {
+               __pSettingsEventListener->HandleGetCallBarringResponse(isCallSuccessful, callBarringType, isBarringActivated);
+       }
+}
+
+void
+SettingsPresentationModel::HandleSetCallBarringResponse(bool isCallSuccessful, CallBarringType callBarringType, bool isBarringActivated)
+{
+       if (__pSettingsEventListener != null)
+       {
+               __pSettingsEventListener->HandleSetCallBarringResponse(isCallSuccessful, callBarringType, isBarringActivated);
+       }
+}
+
+void
+SettingsPresentationModel::HandleFlightMode(bool isFlightModeActivated)
+{
+       CallPresentationModel::GetInstance()->EndAllCall();
+}
+
+result
+SettingsPresentationModel::SetCallState(CallState callState)
+{
+       return __pSettingsMgr->SetCallState(callState);
+}
+
+bool
+SettingsPresentationModel::GetFlightModeStatus(void)
+{
+       return __pSettingsMgr->GetFlightModeStatus();
+}
diff --git a/src/CallSoundManager.cpp b/src/CallSoundManager.cpp
new file mode 100644 (file)
index 0000000..d724bd1
--- /dev/null
@@ -0,0 +1,449 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file    CallSettingsMoreOptionsForm.cpp
+ * @brief   Sound manager class
+ */
+#include "CallSoundManager.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Graphics;
+using namespace Tizen::Io;
+using namespace Tizen::Media;
+using namespace Tizen::Social;
+using namespace Tizen::System;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Base::Runtime;
+
+static const wchar_t* RINGTONE_PATH = L"/opt/usr/apps/zktdpemtmw/shared/data/ringtone_sdk.mp3";
+
+SoundManager::SoundManager(void)
+       : __pSoundCallSession(null)
+       , __pVibrator(null)
+       , __pPlayer(null)
+       , __lastEndedConferenceCall(false)
+{
+       __timer.Construct(*this);
+       __isSoundStatusOn = false;
+       __isVibrateStatusOn = false;
+}
+
+SoundManager::~SoundManager(void)
+{
+       if(__pSoundCallSession != null)
+       {
+               sound_manager_call_session_destroy(__pSoundCallSession);
+       }
+       if (__pVibrator != null)
+       {
+               delete __pVibrator;
+       }
+       if (__pPlayer != null)
+       {
+               delete __pPlayer;
+       }
+
+}
+
+void
+SoundManager::SetlastEndedConferenceCall()
+{
+       __lastEndedConferenceCall = true;
+}
+
+bool
+SoundManager::GetLastConferenceCall()
+{
+       return __lastEndedConferenceCall;
+}
+
+Timer*
+SoundManager::GetTimer()
+{
+       return &__timer;
+}
+
+result
+SoundManager::StopSession(void)
+{
+       AppLogDebug("Enter");
+       if(__pSoundCallSession != null)
+       {
+               AppLogDebug("sound_manager_call_session_destroy");
+               sound_manager_call_session_destroy(__pSoundCallSession);
+               __pSoundCallSession = null;
+       }
+
+       return E_SUCCESS;
+}
+
+result
+SoundManager::StartSession(void)
+{
+       AppLogDebug("Enter");
+       if (__pSoundCallSession != null)
+       {
+               sound_manager_call_session_set_mode(__pSoundCallSession,(sound_call_session_mode_e)SOUND_CALL_SESSION_MODE_VOICE);
+               sound_manager_set_active_route((sound_route_e)SOUND_ROUTE_IN_MIC_OUT_RECEIVER);
+               sound_manager_set_volume((sound_type_e)SOUND_TYPE_CALL,5);
+               return E_SUCCESS;
+       }
+       int res = sound_manager_call_session_create((sound_call_session_type_e)SOUND_SESSION_TYPE_CALL, &__pSoundCallSession);
+       if (res != SOUND_MANAGER_ERROR_NONE)
+       {
+               AppLogDebug("Sound manager creation failed");
+               return E_FAILURE;
+       }
+       res = sound_manager_call_session_set_mode(__pSoundCallSession,(sound_call_session_mode_e)SOUND_CALL_SESSION_MODE_VOICE);
+       sound_manager_set_active_route((sound_route_e)SOUND_ROUTE_IN_MIC_OUT_RECEIVER);
+       //todo start listening for volume key and set the volume
+       sound_manager_set_volume((sound_type_e)SOUND_TYPE_CALL,5);
+       return E_SUCCESS;
+}
+
+result
+SoundManager::SetSpeakerStatus(bool setSpeaker)
+{
+       result r = E_FAILURE;
+       int res = -1;
+       bool isEarJackPresent = IsEarJackConnected();
+       sound_route_e soundRoute;
+       if (setSpeaker == true)
+       {
+               soundRoute = SOUND_ROUTE_IN_MIC_OUT_SPEAKER;
+       }
+       else
+       {
+               if (isEarJackPresent == true)
+               {
+                       soundRoute = SOUND_ROUTE_IN_MIC_OUT_HEADPHONE;
+               }
+               else
+               {
+                       soundRoute = SOUND_ROUTE_IN_MIC_OUT_RECEIVER;
+               }
+       }
+       res = sound_manager_set_active_route(soundRoute);
+       if (res == SOUND_MANAGER_ERROR_NONE)
+       {
+               r = E_SUCCESS;
+       }
+       else
+       {
+               r = E_FAILURE;
+       }
+       return r;
+}
+
+result
+SoundManager::SetSoundMode(SoundMode soundMode)
+{
+       if (__pSoundCallSession == null)
+       {
+               return E_FAILURE;
+       }
+       sound_call_session_mode_e sessionMode;
+       switch (soundMode)
+       {
+       case SOUND_MODE_RINGTONE:
+       {
+               sessionMode = SOUND_CALL_SESSION_MODE_RINGTONE;
+               break;
+       }
+       case SOUND_MODE_MEDIA:
+       {
+               sessionMode = SOUND_CALL_SESSION_MODE_MEDIA;
+               break;
+       }
+       case SOUND_MODE_VOICE:
+       {
+               sessionMode = SOUND_CALL_SESSION_MODE_VOICE;
+       }
+       break;
+       default:
+       {
+               sessionMode = SOUND_CALL_SESSION_MODE_RINGTONE;
+               break;
+       }
+       }
+       int res = sound_manager_call_session_set_mode(__pSoundCallSession,sessionMode);
+       if (res != SOUND_MANAGER_ERROR_NONE)
+       {
+               return E_FAILURE;
+       }
+       return E_SUCCESS;
+}
+
+void
+SoundManager::OnTimerExpired(Timer& timer)
+{
+       String reminderTonePath;
+       int unknownRejectStatus = -1;
+               vconf_get_bool(VCONFKEY_CISSAPPL_MINUTE_MINDER_BOOL, &unknownRejectStatus);
+               bool ReminderToneSetStatus = unknownRejectStatus;
+
+       if(ReminderToneSetStatus == true)
+       {
+
+               if(__pPlayer == null)
+               {
+                       __pPlayer =  new (std::nothrow) Player();
+                       __pPlayer->Construct(*this);
+               }
+
+               reminderTonePath.Append(RINGTONE_PATH);
+               __pPlayer->OpenFile(reminderTonePath,false);
+               __pPlayer->SetLooping(false);
+               __pPlayer->SetVolume(80);
+               SetSoundMode(SOUND_MODE_MEDIA);
+               __pPlayer->Play();
+               SetSoundMode(SOUND_MODE_VOICE);
+       }
+       /*else if(ReminderToneSetStatus == false)
+       {
+               timer.Cancel();
+       }*/
+
+}
+
+
+
+void
+SoundManager::SetDisconnectTone(void)
+{
+
+       int unknownRejectStatus = -1;
+       String disconnectTonePath;
+       vconf_get_bool(VCONFKEY_CISSAPPL_CALL_END_TONE_BOOL, &unknownRejectStatus);
+       bool disconnectToneSetStatus = unknownRejectStatus;
+
+       if(disconnectToneSetStatus == true)
+       {
+               disconnectTonePath.Append(RINGTONE_PATH);
+
+               if(__pPlayer == null)
+               {
+                       __pPlayer =  new (std::nothrow) Player();
+                       __pPlayer->Construct(*this);
+               }
+
+               if(disconnectTonePath.IsEmpty() == false)
+               {
+                       __pPlayer->OpenFile(disconnectTonePath,false);
+                       __pPlayer->SetLooping(false);
+                       __pPlayer->SetVolume(80);
+                       SetSoundMode(SOUND_MODE_MEDIA);
+                       __pPlayer->Play();
+               }
+
+       }
+
+}
+
+void
+SoundManager::SetMinuteReminderTone()
+{
+
+       int unknownRejectStatus = -1;
+       vconf_get_bool(VCONFKEY_CISSAPPL_MINUTE_MINDER_BOOL, &unknownRejectStatus);
+       bool reminderToneSetStatus = unknownRejectStatus;
+
+       if(reminderToneSetStatus == true)
+       {
+               __timer.StartAsRepeatable(20000);
+       }
+
+}
+
+
+void
+SoundManager::SetConnectTone()
+{
+
+       result r = E_FAILURE;
+       String connectTonePath;
+       int unknownRejectStatus = -1;
+       vconf_get_bool(VCONFKEY_CISSAPPL_CALL_CONNECT_TONE_BOOL, &unknownRejectStatus);
+       bool connectToneSetStatus = unknownRejectStatus;
+
+       connectTonePath.Append(RINGTONE_PATH);
+
+       if(connectToneSetStatus == true)
+       {
+               if(__pPlayer == null)
+               {
+                       __pPlayer =  new (std::nothrow) Player();
+                       r = __pPlayer->Construct(*this);
+               }
+
+               if(connectTonePath.IsEmpty() == false)
+               {
+                       r = __pPlayer->OpenFile(connectTonePath,false);
+                       r = __pPlayer->SetLooping(false);
+                       r = __pPlayer->SetVolume(80);
+                       r = SetSoundMode(SOUND_MODE_MEDIA);
+                       r = __pPlayer->Play();
+               }
+       }
+}
+
+void
+SoundManager::StartAlert(String& contactRingTone)
+{
+       AppLogDebug("Enter");
+       if(__pSoundCallSession != null)
+       {
+               AppLogDebug("No Alert already in call");
+               return;
+       }
+       else
+       {
+               StartSession();
+       }
+       result r = E_FAILURE;
+       if(__pVibrator == null)
+       {
+               __pVibrator = new (std::nothrow) Vibrator();
+               r = __pVibrator->Construct();
+       }
+       if(__pPlayer == null)
+       {
+               __pPlayer =  new (std::nothrow) Player();
+               r = __pPlayer->Construct(*this);
+       }
+       int retVal = -1;
+       vconf_get_bool(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, &retVal);
+       __isSoundStatusOn = retVal;
+       vconf_get_bool(VCONFKEY_SETAPPL_VIBRATION_STATUS_BOOL, &retVal);
+       __isVibrateStatusOn = retVal;
+       //todo: do only if call alert mode is set
+       if (__isSoundStatusOn == true)
+       {
+               String ringTonePath;
+               //Check if contact has any custom ringtone, else play defautl ringtone.
+               if(contactRingTone.IsEmpty() == true)
+               {
+                       char* pRingTonePtr = vconf_get_str(VCONFKEY_SETAPPL_CALL_RINGTONE_PATH_STR);
+                       AppLog("Ringtone Path : %s",pRingTonePtr);
+                       ringTonePath.Append(pRingTonePtr);
+               }
+               else
+               {
+                       AppLog("Ringtone Path : %ls",contactRingTone.GetPointer());
+                       ringTonePath.Append(contactRingTone);
+               }
+
+               //Check if file is present
+               File file;
+               result res = file.Construct(ringTonePath, "r");
+               if(res != E_SUCCESS )
+               {
+                       ringTonePath.Clear();
+                       ringTonePath.Append(RINGTONE_PATH);
+               }
+               r = __pPlayer->OpenFile(ringTonePath,false);
+               r = __pPlayer->SetLooping(true);
+               r = __pPlayer->SetVolume(80);
+               r = SetSoundMode(SOUND_MODE_RINGTONE);
+               r = __pPlayer->Play();
+       }
+       if (__isVibrateStatusOn == true)
+       {
+               //todo: Get the level from settings
+               r = __pVibrator->Start(3000,1000,1000);
+       }
+       AppLogDebug("Exit");
+       return;
+}
+
+void
+SoundManager::StopAlert(void)
+{
+       AppLogDebug("Enter");
+       if (__isSoundStatusOn == true)
+       {
+               //todo: stop player
+               AppLogDebug("Stopping ring tone");
+               __pPlayer->Stop();
+               __pPlayer->Close();
+               SetSoundMode(SOUND_MODE_VOICE);
+               __isSoundStatusOn = false;
+               StopSession();
+       }
+       if (__isVibrateStatusOn == true)
+       {
+               __pVibrator->Stop();
+               __isVibrateStatusOn = false;
+       }
+       AppLogDebug("Exit");
+}
+
+void
+SoundManager::OnPlayerOpened(result r)
+{
+}
+
+void
+SoundManager::OnPlayerEndOfClip(void)
+{
+}
+
+void
+SoundManager::OnPlayerSeekCompleted(result r)
+{
+}
+
+void
+SoundManager::OnPlayerBuffering(int percent)
+{
+}
+
+void
+SoundManager::OnPlayerErrorOccurred(Tizen::Media::PlayerErrorReason r)
+{
+}
+
+void
+SoundManager::OnPlayerInterrupted(void)
+{
+}
+
+void
+SoundManager::OnPlayerReleased(void)
+{
+}
+
+bool
+SoundManager::IsEarJackConnected(void)
+{
+       int earJackStatus = -1;
+       if (vconf_get_int(VCONFKEY_SYSMAN_EARJACK, &earJackStatus) == 0)
+       {
+               if (earJackStatus == VCONFKEY_SYSMAN_EARJACK_REMOVED)
+               {
+                       return false;
+               }
+               else
+               {
+                       return true;
+               }
+       }
+       else
+       {
+               return false;
+       }
+}
diff --git a/src/CallTelephonyManager.cpp b/src/CallTelephonyManager.cpp
new file mode 100644 (file)
index 0000000..dd2e5cc
--- /dev/null
@@ -0,0 +1,2557 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file       CallTelephonyManager.cpp
+ * @brief      Call log item provider
+ */
+#include <stdio.h>
+#include <FBaseSys.h>
+#include <FSystem.h>
+#include "ITapiModem.h"
+#include "ITapiSim.h"
+#include "CallInfo.h"
+#include "CallTelephonyManager.h"
+#include "CallSettingsManager.h"
+#include "CallTypes.h"
+
+using namespace Tizen::Base;
+using namespace Tizen::Graphics;
+using namespace Tizen::Social;
+using namespace Tizen::System;
+using namespace Tizen::Base::Collection;
+
+const char* callEventList[] = {
+               TAPI_NOTI_VOICE_CALL_STATUS_IDLE,
+               TAPI_NOTI_VOICE_CALL_STATUS_ACTIVE,
+               TAPI_NOTI_VOICE_CALL_STATUS_HELD,
+               TAPI_NOTI_VOICE_CALL_STATUS_DIALING,
+               TAPI_NOTI_VOICE_CALL_STATUS_ALERT,
+               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_INFO_CF_CHECK_MESSAGE,
+};
+
+TelephonyManager* TelephonyManager::__pManager = null;
+
+TelephonyManager::TelephonyManager(ITelephonyEventListener* pEventListener)
+: __pEventListener(pEventListener)
+{
+       __pDialedCall = null;
+       __pIncomingCall = null;
+       __pActiveCallList = null;
+       __pSettingsManager = null;
+       __pTapiHandle = null;
+       __pAddressBook = null;
+       __pCachedContact = null;
+       __isMuted = false;
+       __isSpeakerOn = false;
+       __pSoundManager = null;
+       __pCalllogMgr = null;
+}
+
+TelephonyManager::~TelephonyManager(void)
+{
+       if (__pActiveCallList != null)
+       {
+               delete __pActiveCallList;
+       }
+
+       if (__pDialedCall != null)
+       {
+               delete __pDialedCall;
+               __pDialedCall = null;
+       }
+
+       if (__pIncomingCall != null)
+       {
+               delete __pIncomingCall;
+               __pIncomingCall = null;
+       }
+
+       if (__pAddressBook != null)
+       {
+               delete __pAddressBook;
+               __pAddressBook = null;
+       }
+       if (__pCachedContact != null)
+       {
+               delete __pCachedContact;
+               __pCachedContact = null;
+       }
+
+       //unregister for events from TAPI Lib.
+       UnregisterEvents();
+
+       //De-initialize the TAPI Library
+       if(__pTapiHandle != null)
+       {
+               tel_deinit(__pTapiHandle);
+       }
+
+       if (__pSoundManager != null)
+       {
+               delete __pSoundManager;
+       }
+
+       if (__pCalllogMgr != null)
+       {
+               __pCalllogMgr = null;
+       }
+}
+
+TelephonyManager*
+TelephonyManager::GetInstance(ITelephonyEventListener* pEventListener)
+{
+       if (__pManager == null)
+       {
+               CreateInstance(pEventListener);
+       }
+       return __pManager;
+}
+
+void
+TelephonyManager::CreateInstance(ITelephonyEventListener* pEventListener)
+{
+       __pManager = new (std::nothrow) TelephonyManager(pEventListener);
+       result r = __pManager->Initialize();
+       if (IsFailed(r))
+       {
+               delete __pManager;
+               __pManager = null;
+       }
+       atexit(&(TelephonyManager::DestroyInstance));
+}
+
+void
+TelephonyManager::DestroyInstance(void)
+{
+       if (__pManager != null)
+       {
+               __pManager->EndAllCalls();
+               delete __pManager;
+               __pManager = null;
+       }
+}
+
+result
+TelephonyManager::Initialize(void)
+{
+       //Initialize telephony library
+       result r = InitializeTelephonyLibrary();
+       if (IsFailed(r))
+       {
+               return r;
+       }
+       __pActiveCallList = new (std::nothrow) HashMapT<long, CallInfo>();
+       __pActiveCallList->Construct(IDI_MAX_ACTIVE_CALLS);
+
+       //Initialize the Settings Manager to fetch call settings
+       __pSettingsManager = SettingsManager::GetInstance();
+
+       __pSoundManager = new (std::nothrow) SoundManager();
+       __pCalllogMgr = CallLogManager::GetInstance();
+
+       //initialize address book to fetch contacts information
+       __pAddressBook = AddressbookManager::GetInstance()->GetAddressbookN();
+       if(__pAddressBook == null)
+       {
+               return E_FAILURE;
+       }
+       return r;
+}
+
+result
+TelephonyManager::InitializeTelephonyLibrary(void)
+{
+       result r = E_FAILURE;
+
+       __pTapiHandle = tel_init(null);
+       if (__pTapiHandle != null)
+       {
+               //register telephony events
+               int errorCode = RegisterEvents();
+               if (errorCode == TAPI_CAUSE_SUCCESS)
+               {
+                       r = E_SUCCESS;
+               }
+       }
+       //TAPI Library is initialized and events registered successfully
+       return r;
+}
+
+int
+TelephonyManager::RegisterEvents(void)
+{
+       int errCode = -1;
+       int eventCount = sizeof(callEventList) / sizeof(char *);
+       for (int index = 0; index < eventCount; index++)
+       {
+               errCode = tel_register_noti_event(__pTapiHandle, callEventList[index], &HandleCallback, this);
+               if (errCode != TAPI_API_SUCCESS)
+               {
+                       return errCode;
+               }
+       }
+       return errCode;
+}
+
+void
+TelephonyManager::UnregisterEvents(void)
+{
+       int eventCount = sizeof(callEventList) / sizeof(char *);
+       for (int index = 0; index < eventCount; index++)
+       {
+               tel_deregister_noti_event(__pTapiHandle, callEventList[index]);
+       }
+}
+
+ErrorCodes
+TelephonyManager::SetupMoCall(String& contactNumber, bool isEmergency)
+{
+       result res = E_SUCCESS;
+       //check if valid phone number exist
+       res = CheckValidTelePhoneNumber(contactNumber);
+       if (IsFailed(res))
+       {
+               return ERROR_INVALID_NUMBER;
+       }
+
+       //if dialing an emergency call and active calls exist
+       //then end all active calls.
+       if (isEmergency && __pActiveCallList->GetCount() > 0)
+       {
+               //Get first call handle
+               CallInfo endCallInfo;
+               IListT<CallInfo>* pCallList = __pActiveCallList->GetValuesN();
+               pCallList->GetAt(0, endCallInfo);
+               int callHandle = endCallInfo.GetCallHandle()->ToLong();
+               delete pCallList;
+               pCallList = null;
+
+               //release all active or held calls
+               int tapiRes = tel_end_call(__pTapiHandle, callHandle, TAPI_CALL_END_ALL, &HandleCallbackResponse, this);
+               if (tapiRes == TAPI_CAUSE_SUCCESS)
+               {
+                       __pActiveCallList->RemoveAll();
+                       res = E_SUCCESS;
+               }
+               else
+               {
+                       res = E_FAILURE;
+               }
+       }
+       else if (__pActiveCallList->GetCount() == 1)
+       {
+               //Check if there is already an active call,
+               //Put the already active call on hold.
+               CallInfo holdCallInfo;
+               IListT<CallInfo>* pCallList = __pActiveCallList->GetValuesN();
+
+               pCallList->GetAt(0, holdCallInfo);
+               //Check if call is active, then put on hold
+               if (holdCallInfo.IsOnHold() == false)
+               {
+                       res = HoldActiveCall(&holdCallInfo, true);
+               }
+               delete pCallList;
+               pCallList = null;
+       }
+
+       //make the next call, only if any existing active call
+       //is successfully put on hold or is already on hold.
+       if (res == E_SUCCESS)
+       {
+               res = DialOutgoingCall(contactNumber, isEmergency);
+       }
+
+       if(res == E_SUCCESS)
+       {
+               return ERROR_NONE;
+       }
+       else
+       {
+               return ERROR_TAPI_ERROR;
+       }
+}
+
+void
+TelephonyManager::EndAllCalls(void)
+{
+       if(__pDialedCall != null)
+       {
+               if(__pDialedCall->GetCallHandle() != null)
+               {
+                       tel_end_call(__pTapiHandle, __pDialedCall->GetCallHandle()->ToLong(), TAPI_CALL_END, &HandleCallbackResponse, this);
+               }
+       }
+       tel_end_call(__pTapiHandle, -1, TAPI_CALL_END_HOLD_ALL, &HandleCallbackResponse, this);
+       //end all active calls before terminating application
+       tel_end_call(__pTapiHandle, -1, TAPI_CALL_END_ALL, &HandleCallbackResponse, this);
+       __pSettingsManager->SetCallState(CALL_STATE_CALL_OFF);
+}
+
+result
+TelephonyManager::EndActiveCall(Long callHandle)
+{
+       result r = E_FAILURE;
+
+       //fetch ended callInfo from active call list
+       CallInfo endCall;
+       r = __pActiveCallList->GetValue(callHandle.ToLong(), endCall);
+       if (r == E_SUCCESS)
+       {
+               r = EndCall(endCall);
+       }
+       return r;
+}
+
+result
+TelephonyManager::EndDialingCall(String& contactNumber)
+{
+       result r = E_FAILURE;
+       //This is because for a dialing call, call handle is updated with some delay in telephony manager.
+       //And it is not available with outgoing call screen.
+       if (contactNumber.IsEmpty())
+       {
+               return r;
+       }
+
+       //Check If Ended call matches Dialed Call.
+       CallInfo endCall;
+       if (__pDialedCall != null && __pDialedCall->GetContactNumber().Equals(contactNumber))
+       {
+               endCall = *__pDialedCall;
+               r = EndCall(endCall);
+       }
+       return r;
+}
+
+result
+TelephonyManager::EndCall(CallInfo& endCallInfo)
+{
+       result r = E_FAILURE;
+
+       if (endCallInfo.GetCallHandle() != null)
+       {
+               unsigned int callHandle = endCallInfo.GetCallHandle()->ToLong();
+               //end "dialed but unconnected" call or active call - processing to be handled in HandleIdleCallback().
+               int res = tel_end_call(__pTapiHandle, callHandle, TAPI_CALL_END, &HandleCallbackResponse, this);
+               if (res == TAPI_CAUSE_SUCCESS)
+               {
+                       r = E_SUCCESS;
+               }
+       }
+       return r;
+}
+
+result
+TelephonyManager::AnswerCall(int callHandle, bool acceptCall)
+{
+       result r = E_FAILURE;
+       __pSoundManager->StopAlert();
+       TelCallAnswerType_t answerType = TAPI_CALL_ANSWER_ACCEPT;
+       int res = -1;
+       if (acceptCall == true)
+       {
+               answerType = TAPI_CALL_ANSWER_ACCEPT;
+               // redirect to dummy call back handler as the flow already handled in registered event callback
+               res = tel_answer_call(__pTapiHandle, callHandle, answerType, &HandleCallbackResponse, this);
+       }
+       else
+       {
+               answerType = TAPI_CALL_ANSWER_REJECT;
+               // redirect to reject call back handler as the flow has to be handled
+               res = tel_answer_call(__pTapiHandle, callHandle, answerType, &HandleRejectCallbackResponse, this);
+       }
+
+       if (res == TAPI_CAUSE_SUCCESS)
+       {
+               r = E_SUCCESS;
+       }
+       else
+       {
+               r = E_FAILURE;
+       }
+       return r;
+}
+
+result
+TelephonyManager::AcceptCall(CallAnsweringOptions answerOptions,int callHandle)
+{
+       result r = E_FAILURE;
+       __pSoundManager->StopAlert();
+       __pSoundManager->SetSoundMode(SOUND_MODE_VOICE);
+
+       //Check if this is a new incoming call
+       if(__pIncomingCall == null || (callHandle != (unsigned int)__pIncomingCall->GetCallHandle()->ToLong()))
+       {
+               //construct and fetch new Incoming call Info
+               String incomingHandle;
+               incomingHandle.Append(callHandle);
+               CallInfo* pDuplicateCallInfo = FetchIncomingCallHandleN(incomingHandle, String(L""));
+               if(pDuplicateCallInfo == null)
+               {
+                       r = E_FAILURE;
+                       return r;
+               }
+               delete pDuplicateCallInfo;
+               pDuplicateCallInfo = null;
+       }
+
+       switch(answerOptions)
+       {
+       case ANSERWING_OPTION_HOLD_SINGLE_CALL:
+       case ANSERWING_OPTION_END_SINGLE_CALL:
+       {
+               r = AcceptSecondCall(answerOptions, callHandle);
+       }
+       break;
+
+       case ANSERWING_OPTION_REPLACE_ACTIVE_CALL:
+       case ANSERWING_OPTION_REPLACE_HELD_CALL:
+       case ANSERWING_OPTION_END_ALL_CALLS:
+       {
+               r = AcceptMultipleCall(answerOptions, callHandle);
+       }
+       break;
+
+       default:
+               break;
+       }
+       return r;
+}
+
+result
+TelephonyManager::AcceptSecondCall(CallAnsweringOptions answerOptions, const int incomingCallHandle)
+{
+       result r = E_FAILURE;
+
+       switch (answerOptions)
+       {
+       case ANSERWING_OPTION_HOLD_SINGLE_CALL:
+       {
+               //accept incoming call by putting active call on Hold with 'TAPI_CALL_ANSWER_HOLD_AND_ACCEPT'
+               int res = tel_answer_call(__pTapiHandle, incomingCallHandle, TAPI_CALL_ANSWER_HOLD_AND_ACCEPT, &HandleCallbackResponse, this);
+               if (res != 0)
+               {
+                       r = E_FAILURE;
+                       break;
+               }
+
+               //Call connected successfully
+               r = E_SUCCESS;
+               //update status of first call to "OnHold"
+               IListT<CallInfo>* pCallList = __pActiveCallList->GetValuesN();
+               CallInfo firstCallInfo;
+               pCallList->GetAt(0, firstCallInfo);
+               //replace old object with update CallInfo
+               CallInfo* pHeldCallInfo = new (std::nothrow) CallInfo();
+               *pHeldCallInfo = firstCallInfo;
+               pHeldCallInfo->SetOnHold(true);
+               __pActiveCallList->Remove(firstCallInfo.GetCallHandle()->ToLong());
+               __pActiveCallList->Add(pHeldCallInfo->GetCallHandle()->ToLong(), *pHeldCallInfo);
+               delete pCallList;
+               pCallList = null;
+       }
+       break;
+
+       case ANSERWING_OPTION_END_SINGLE_CALL:
+       {
+               //Transfer Old active calls to a separate list to avoid any processing in HandleIdleCallback().
+               HashMapT<long, CallInfo>*  pEndCallsList = __pActiveCallList;
+               //create a new ActiveCallList
+               __pActiveCallList = new (std::nothrow) HashMapT<long, CallInfo>();
+               __pActiveCallList->Construct(IDI_MAX_ACTIVE_CALLS);
+
+               //accept call and reject all active calls with 'TAPI_CALL_ANSWER_REPLACE'
+               int res = tel_answer_call(__pTapiHandle, incomingCallHandle, TAPI_CALL_ANSWER_REPLACE, &HandleCallbackResponse, this);
+               if (res != 0)
+               {
+                       r = E_FAILURE;
+                       //delete newly constructed list and gain ownership of old list
+                       delete __pActiveCallList;
+                       __pActiveCallList = pEndCallsList;
+                       break;
+               }
+
+               //Call connected successfully
+               r = E_SUCCESS;
+               //Add calls information to call log before deleting from active call list.
+               IListT<CallInfo>* pCallList = pEndCallsList->GetValuesN();
+               if(pCallList != null)
+               {
+                       CallInfo endCallInfo;
+                       if (pCallList->GetAt(0, endCallInfo) == E_SUCCESS)
+                       {
+                               SaveCallInfoToLogsDb(endCallInfo);
+                       }
+                       delete pCallList;
+               }
+               pEndCallsList->RemoveAll();
+               delete pEndCallsList;
+       }
+       break;
+
+       default:
+               break;
+       }
+       return r;
+}
+
+result
+TelephonyManager::AcceptMultipleCall(CallAnsweringOptions answerOptions, const int incomingCallHandle)
+{
+       result r = E_FAILURE;
+
+       switch (answerOptions)
+       {
+       case ANSERWING_OPTION_REPLACE_ACTIVE_CALL:
+       {
+               //Replace "Active" call by incoming call and save ended call to call logs db.
+               IListT<CallInfo>* pCallList = __pActiveCallList->GetValuesN();
+               CallInfo callToBeEnded;
+               pCallList->GetAt(0, callToBeEnded);
+               //Check if the call is on "Hold", then fetch 2nd callInfo
+               if (callToBeEnded.IsOnHold() == true)
+               {
+                       pCallList->GetAt(1, callToBeEnded);
+               }
+               delete pCallList;
+               pCallList = null;
+
+               //remove "CallToBeEnded" from Active call list to avoid processing in HandleIdleCallback().
+               __pActiveCallList->Remove(callToBeEnded.GetCallHandle()->ToLong());
+
+               //Accept incoming call by End Active call with 'TAPI_CALL_ANSWER_REPLACE'
+               int res = tel_answer_call(__pTapiHandle, incomingCallHandle, TAPI_CALL_ANSWER_REPLACE, &HandleCallbackResponse, this);
+               if (res != 0)
+               {
+                       r = E_FAILURE;
+                       //save the previous call back to active call list
+                       __pActiveCallList->Add(callToBeEnded.GetCallHandle()->ToLong(), callToBeEnded);
+                       break;
+               }
+
+               //Incoming Call connected successfully
+               r = E_SUCCESS;
+               //save to ended call to call logs db.
+               SaveCallInfoToLogsDb(callToBeEnded);
+       }
+       break;
+
+       case ANSERWING_OPTION_REPLACE_HELD_CALL:
+       {
+               //Replace "Held" call by incoming call and save ended call to call logs db.
+               IListT<CallInfo>* pCallList = __pActiveCallList->GetValuesN();
+               //"Held" call is to be ended
+               CallInfo callToBeEnded;
+               //"Active" call will be put on Hold
+               CallInfo callToPutOnHold;
+               pCallList->GetAt(0, callToBeEnded);
+               //Check if the call is NOT "Held", then fetch 2nd callInfo
+               if (callToBeEnded.IsOnHold() == false)
+               {
+                       callToPutOnHold = callToBeEnded;
+                       pCallList->GetAt(1, callToBeEnded);
+               }
+               else
+               {
+                       pCallList->GetAt(1, callToPutOnHold);
+               }
+               delete pCallList;
+               pCallList = null;
+
+               //remove "CallToBeEnded" from Active call list to avoid processing in HandleIdleCallback().
+               __pActiveCallList->Remove(callToBeEnded.GetCallHandle()->ToLong());
+
+               //End "Held" Call using 'TAPI_CALL_END'.
+               int res = -1;
+               if (callToBeEnded.IsConferenceCall() == false)
+               {
+                       res = tel_end_call(__pTapiHandle, callToBeEnded.GetCallHandle()->ToLong(), TAPI_CALL_END, &HandleCallbackResponse, this);
+               }
+               else
+               {
+                       IListT<CallInfo>* pParticipantsInfo = callToBeEnded.GetCallerList();
+                       //need to end every participant individually for conference call
+                       for (int index = 0; index < pParticipantsInfo->GetCount(); index++)
+                       {
+                               CallInfo memberCallInfo;
+                               pParticipantsInfo->GetAt(index, memberCallInfo);
+                               res = tel_end_call(__pTapiHandle, memberCallInfo.GetCallHandle()->ToLong(), TAPI_CALL_END, &HandleCallbackResponse, this);
+                       }
+               }
+
+               if (res != 0)
+               {
+                       r = E_FAILURE;
+                       //save the previous "callToBeEnded" call back to active call list
+                       __pActiveCallList->Add(callToBeEnded.GetCallHandle()->ToLong(), callToBeEnded);
+                       break;
+               }
+               //"Held" call successfully ended - Add call ended to call log database
+               SaveCallInfoToLogsDb(callToBeEnded);
+
+               //accept incoming call by Holding "Active" call using "TAPI_CALL_ANSWER_HOLD_AND_ACCEPT".
+               res = tel_answer_call(__pTapiHandle, incomingCallHandle, TAPI_CALL_ANSWER_HOLD_AND_ACCEPT, &HandleCallbackResponse, this);
+               if (res != 0)
+               {
+                       r = E_FAILURE;
+                       break;
+               }
+
+               //Call connected successfully and active call is "Onhold"
+               r = E_SUCCESS;
+               //replace old object with update CallInfo
+               CallInfo* pHeldCallInfo = new (std::nothrow) CallInfo();
+               *pHeldCallInfo = callToPutOnHold;
+               pHeldCallInfo->SetOnHold(true);
+               __pActiveCallList->Remove(callToPutOnHold.GetCallHandle()->ToLong());
+               __pActiveCallList->Add(pHeldCallInfo->GetCallHandle()->ToLong(), *pHeldCallInfo);
+       }
+       break;
+
+       case ANSERWING_OPTION_END_ALL_CALLS:
+       {
+               //End all active and Held calls after saving to call log. Incoming call is automatically accepted by TAPI engine,
+               // and processing of Incoming call is handled in HandleActiveCallback().
+
+               //Transfer Old active calls to a separate list to avoid any processing in HandleIdleCallback().
+               HashMapT<long, CallInfo>*  pEndCallsList = __pActiveCallList;
+               //create a new ActiveCallList
+               __pActiveCallList = new (std::nothrow) HashMapT<long, CallInfo>();
+               __pActiveCallList->Construct(IDI_MAX_ACTIVE_CALLS);
+
+               //End all active calls and all hold calls
+               int res = tel_end_call(__pTapiHandle, -1, TAPI_CALL_END_ACTIVE_ALL, &HandleCallbackResponse, this);
+               if(res == 0)
+               {
+                       res = tel_end_call(__pTapiHandle, -1, TAPI_CALL_END_HOLD_ALL, &HandleCallbackResponse, this);
+               }
+
+               if (res != 0)
+               {
+                       r = E_FAILURE;
+                       //delete newly constructed list and gain ownership of old list
+                       delete __pActiveCallList;
+                       __pActiveCallList = pEndCallsList;
+                       break;
+               }
+
+               //all calls ended successfully, Incoming call is automatically accepted.
+               r = E_SUCCESS;
+
+               //Add calls information to call log before deleting from active call list.
+               IListT<CallInfo>* pCallList = pEndCallsList->GetValuesN();
+               if(pCallList != null)
+               {
+                       int callCount = pCallList->GetCount();
+                       for (int index = 0; index < callCount; index++)
+                       {
+                               CallInfo endCallInfo;
+                               if (pCallList->GetAt(index, endCallInfo) == E_SUCCESS)
+                               {
+                                       SaveCallInfoToLogsDb(endCallInfo);
+                               }
+                       }
+                       delete pCallList;
+                       pCallList = null;
+               }
+               pEndCallsList->RemoveAll();
+               delete pEndCallsList;
+               pEndCallsList = null;
+       }
+       break;
+
+       default:
+               break;
+       }
+       return r;
+}
+
+result
+TelephonyManager::HoldCall(Tizen::Base::Long callHandle, bool holdCall)
+{
+       result r = E_SUCCESS;
+       //Check if there are any existing active calls
+       if (__pActiveCallList->GetCount())
+       {
+               IListT<CallInfo>* pCallList = __pActiveCallList->GetValuesN();
+               int callCount = pCallList->GetCount();
+               for (int index = 0; index < callCount; index++)
+               {
+                       CallInfo holdCallInfo;
+
+                       r = pCallList->GetAt(index, holdCallInfo);
+                       //check if an active call is found with matching contact no.
+                       if ((r == E_SUCCESS) && (holdCallInfo.GetCallHandle()->Equals(callHandle)))
+                       {
+                               r = HoldActiveCall(&holdCallInfo, holdCall);
+                               break;
+                       }
+               }
+               delete pCallList;
+               pCallList = null;
+       }
+
+       return r;
+}
+
+result
+TelephonyManager::EndConferenceCall(void)
+{
+       result r = E_FAILURE;
+       //fetch conference callInfo to end
+       CallInfo confCallToEnd;
+       bool isConferenceCallFound = false;
+
+       IListT<CallInfo>* pCallList = __pActiveCallList->GetValuesN();
+       int callCount = pCallList->GetCount();
+       for (int index = 0; index < callCount; index++)
+       {
+               pCallList->GetAt(index, confCallToEnd);
+               if (confCallToEnd.IsConferenceCall() == true)
+               {
+                       isConferenceCallFound = true;
+                       break;
+               }
+       }
+       delete pCallList;
+       pCallList = null;
+
+       if (isConferenceCallFound == true)
+       {
+               //End conference call
+               TelCallEndType_t callEndType = TAPI_CALL_END_ACTIVE_ALL;
+               if (confCallToEnd.IsOnHold() == true)
+               {
+                       callEndType = TAPI_CALL_END_HOLD_ALL;
+               }
+               int res = tel_end_call(__pTapiHandle, confCallToEnd.GetCallHandle()->ToLong(), callEndType, &HandleEndConferenceCallbackResponse, this);
+               if (res == TAPI_CAUSE_SUCCESS)
+               {
+                       r = E_SUCCESS;
+               }
+       }
+       return r;
+}
+
+result
+TelephonyManager::HoldConferenceCall(bool holdCall)
+{
+       result r = E_FAILURE;
+       int confCallIndex = -1;
+       CallInfo confCallToHold;
+       bool isConferenceCallFound = false;
+
+       IListT<CallInfo>* pCallList = __pActiveCallList->GetValuesN();
+       int confCallCount = pCallList->GetCount();
+
+       for (int index = 0; index < confCallCount; index++)
+       {
+               pCallList->GetAt(index, confCallToHold);
+               if (confCallToHold.IsConferenceCall() == true)
+               {
+                       isConferenceCallFound = true;
+                       confCallIndex = index;
+                       //Found the Conference call to be ended.
+                       break;
+               }
+       }
+
+       if (isConferenceCallFound == false)
+       {
+               delete pCallList;
+               pCallList = null;
+               return r;
+       }
+
+       unsigned int callHandle = confCallToHold.GetCallHandle()->ToLong();
+       int res = TAPI_API_INVALID_INPUT;
+       if (holdCall == true)
+       {
+               res = tel_hold_call(__pTapiHandle, callHandle, &HandleCallbackResponse, this);
+       }
+       else
+       {
+               res = tel_active_call(__pTapiHandle, callHandle, &HandleCallbackResponse, this);
+       }
+       if (res == TAPI_API_SUCCESS)
+       {
+               r = E_SUCCESS;
+               if (holdCall == true)
+               {
+                       confCallToHold.SetOnHold(true);
+               }
+               else
+               {
+                       confCallToHold.SetOnHold(false);
+               }
+               CallInfo* pConfCallInfo = new (std::nothrow) CallInfo();
+               *pConfCallInfo = confCallToHold;
+               __pActiveCallList->Remove(callHandle);
+               __pActiveCallList->Add(callHandle, *pConfCallInfo);
+       }
+       else
+       {
+               r = E_FAILURE;
+       }
+
+       delete pCallList;
+       pCallList = null;
+       return r;
+}
+
+result
+TelephonyManager::JoinCall(void)
+{
+       result r = E_FAILURE;
+       int res = -1;
+       CallInfo activeCall;
+       CallInfo heldCall;
+       // Use enumerator to access elements in the map
+       IListT<CallInfo>* pCallList = __pActiveCallList->GetValuesN();
+       r = pCallList->GetAt(0, activeCall);
+
+       if (r == E_SUCCESS)
+       {
+               r = pCallList->GetAt(1, heldCall);
+               if (r == E_SUCCESS)
+               {
+                       unsigned int activeCallHandle = activeCall.GetCallHandle()->ToLong();
+                       unsigned int heldCallHandle = heldCall.GetCallHandle()->ToLong();
+
+                       //Check if participants in conference call are under limit.
+                       if ((heldCall.IsConferenceCall() == true) && (heldCall.GetCallerListCount() < IDI_MAX_CONF_CALL_PARTICIPANTS))
+                       {
+                               res = tel_join_call(__pTapiHandle, heldCallHandle, activeCallHandle, &HandleJoinCallbackResponse, this);
+                       }
+                       else if (activeCall.GetCallerListCount() < IDI_MAX_CONF_CALL_PARTICIPANTS)
+                       {
+                               res = tel_join_call(__pTapiHandle, activeCallHandle, heldCallHandle, &HandleJoinCallbackResponse, this);
+                       }
+               }
+       }
+       delete pCallList;
+       pCallList = null;
+       if (res == TAPI_API_SUCCESS)
+       {
+               r = E_SUCCESS;
+       }
+       else
+       {
+               r = E_FAILURE;
+       }
+       return r;
+}
+
+result
+TelephonyManager::HoldActiveCall(CallInfo* pActiveCallInfo, bool holdCall)
+{
+       unsigned int callHandle = pActiveCallInfo->GetCallHandle()->ToLong();
+       int retStatus = -1;
+       if (holdCall == true)
+       {
+               retStatus = tel_hold_call(__pTapiHandle, callHandle, &HandleCallbackResponse, this);
+       }
+       else
+       {
+               retStatus = tel_active_call(__pTapiHandle, callHandle, &HandleCallbackResponse, this);
+       }
+
+       if (retStatus == TAPI_CAUSE_SUCCESS)
+       {
+               CallInfo* pHeldCallInfo = new (std::nothrow) CallInfo();
+               //copy state into new callinfo object
+               *pHeldCallInfo = *pActiveCallInfo;
+
+               //set call to hold state
+               pHeldCallInfo->SetOnHold(holdCall);
+
+               __pActiveCallList->Remove(callHandle);
+               //replace old object with new
+               __pActiveCallList->Add(callHandle, *pHeldCallInfo);
+               return E_SUCCESS;
+       }
+       else
+       {
+               return E_FAILURE;
+       }
+}
+
+result
+TelephonyManager::DialOutgoingCall(String& contactNumber, bool isEmergency)
+{
+       TelCallDial_t structDialCall;
+
+       //conversion "contactNumber" to char*
+       const wchar_t* pContact = contactNumber.GetPointer();
+       int len = contactNumber.GetLength()+1;
+       char* pNumber = new (std::nothrow) char[len];
+       wcstombs(pNumber, pContact, len);
+
+
+       //initialize request parameter
+       memset(&structDialCall, '\0', sizeof(TelCallDial_t));
+       memcpy(structDialCall.szNumber, pNumber, strlen(pNumber));
+       AppLogDebug("%s",structDialCall.szNumber);
+       if(isEmergency == true)
+       {
+               structDialCall.CallType = TAPI_CALL_TYPE_E911;
+       }
+       else
+       {
+               structDialCall.CallType = TAPI_CALL_TYPE_VOICE;
+       }
+
+       int res = tel_dial_call(__pTapiHandle, &structDialCall, &HandleDialCallbackResponse, this);
+       if (__pSoundManager == null)
+       {
+               __pSoundManager = new (std::nothrow) SoundManager();
+       }
+       __pSoundManager->StartSession();
+       delete[] pNumber;
+       pNumber = null;
+
+       if (res == TAPI_CAUSE_SUCCESS)
+       {
+               if (__pDialedCall != null)
+               {
+                       delete __pDialedCall;
+                       __pDialedCall = null;
+               }
+               __pDialedCall = new (std::nothrow) CallInfo();
+               __pDialedCall->SetContactNumber(contactNumber);
+               __pDialedCall->SetEmergency(isEmergency);
+               result r = FetchContactInfoForNumber(contactNumber);
+               if (!IsFailed(r))
+               {
+                       __pDialedCall->SetContactInfo(*__pCachedContact);
+               }
+               return E_SUCCESS;
+       }
+       else
+       {
+               return E_FAILURE;
+       }
+}
+
+result
+TelephonyManager::SwapCalls(void)
+{
+       result r = E_FAILURE;
+
+       //check if there are atleast 2 active calls
+       if (__pActiveCallList->GetCount() == IDI_MAX_ACTIVE_CALLS)
+       {
+               int retStatus = 0;
+
+               //fetch call handles
+               IListT<long>* pCallHandleList = __pActiveCallList->GetKeysN();
+               long callHandle1 = 0;
+               pCallHandleList->GetAt(0, callHandle1);
+               long callHandle2 = 0;
+               pCallHandleList->GetAt(1, callHandle2);
+
+               retStatus = tel_swap_call(__pTapiHandle, callHandle1, callHandle2, &HandleSwapCallbackResponse, this);
+
+               if (retStatus == TAPI_CAUSE_SUCCESS)
+               {
+                       r = E_SUCCESS;
+               }
+               delete pCallHandleList;
+               pCallHandleList = null;
+       }
+
+       return r;
+}
+
+result
+TelephonyManager::SendCallDTMF(String& textToBeSent)
+{
+       result r = E_FAILURE;
+       //check if there is an active Call
+       if (__pActiveCallList->GetCount() > 0)
+       {
+               //conversion "textToBeSent" to char*
+               const wchar_t* pTextToBeSent = textToBeSent.GetPointer();
+               int len = textToBeSent.GetLength() + 1;
+               char* pNumber = new (std::nothrow) char[len];
+               wcstombs(pNumber, pTextToBeSent, len);
+               int retStatus = tel_call_dtmf(__pTapiHandle, pNumber, &HandleCallbackResponse, this);
+               delete []pNumber;
+               pNumber = null;
+               if (retStatus == TAPI_CAUSE_SUCCESS)
+               {
+                       r = E_SUCCESS;
+               }
+       }
+       return r;
+}
+
+result
+TelephonyManager::EndFromConference(int callHandle)
+{
+       result r = E_FAILURE;
+       int confCallIndex = -1;
+       CallInfo endConfCall;
+       bool isConferenceCallFound = false;
+
+       IListT<CallInfo>* pCallList = __pActiveCallList->GetValuesN();
+       int callCount = pCallList->GetCount();
+       for (int index = 0; index < callCount; index++)
+       {
+               pCallList->GetAt(index, endConfCall);
+               if (endConfCall.IsConferenceCall() == true)
+               {
+                       isConferenceCallFound = true;
+                       confCallIndex = index;
+                       //Found the Conference call to be ended.
+                       break;
+               }
+       }
+
+       delete pCallList;
+       pCallList = null;
+
+       if (isConferenceCallFound == false)
+       {
+               //no conference call found
+               return r;
+       }
+
+       //Identify the call to be ended and remove from list on API success
+       CallInfo callToBeEnded;
+       IListT<CallInfo>* pParticipantList = endConfCall.GetCallerList();
+       int participantCount = pParticipantList->GetCount();
+       for (int index = 0; index < participantCount; index++)
+       {
+               pParticipantList->GetAt(index, callToBeEnded);
+               if (callToBeEnded.GetCallHandle()->ToLong() == callHandle)
+               {
+                       //Identify the call to be ended and remove from list on API success
+                       TelCallEndType_t endType = TAPI_CALL_END;
+
+                       int res = tel_end_call(__pTapiHandle, callHandle, endType, &HandleEndFromConferenceCallbackResponse, this);
+                       if (res == TAPI_CAUSE_SUCCESS)
+                       {
+                               r = E_SUCCESS;
+                       }
+                       else
+                       {
+                               r = E_FAILURE;
+                       }
+                       break;
+               }
+       }
+
+       return r;
+}
+
+result
+TelephonyManager::SplitFromConference(int callHandle)
+{
+       result r = E_FAILURE;
+       int confCallIndex = -1;
+       CallInfo endConfCall;
+       bool isConferenceCallFound = false;
+
+       IListT<CallInfo>* pCallList = __pActiveCallList->GetValuesN();
+       int callCount = pCallList->GetCount();
+       for (int index = 0; index < callCount; index++)
+       {
+               pCallList->GetAt(index, endConfCall);
+               if (endConfCall.IsConferenceCall() == true)
+               {
+                       isConferenceCallFound = true;
+                       confCallIndex = index;
+                       //Found the Conference call to be ended.
+                       break;
+               }
+       }
+       delete pCallList;
+       pCallList = null;
+       if (isConferenceCallFound == false)
+       {
+               //no conference call found
+               return r;
+       }
+
+       //Identify the call to be ended and remove from list on API success
+       CallInfo callToBeEnded;
+       pCallList = endConfCall.GetCallerList();
+       callCount = pCallList->GetCount();
+       for (int index = 0; index < callCount; index++)
+       {
+               pCallList->GetAt(index, callToBeEnded);
+               if (callToBeEnded.GetCallHandle()->ToLong() == callHandle)
+               {
+                       int res = tel_split_call(__pTapiHandle, callHandle, &HandleSplitFromConferenceCallbackResponse, this);
+                       if (res == TAPI_CAUSE_SUCCESS)
+                       {
+                               r = E_SUCCESS;
+                       }
+                       else
+                       {
+                               r = E_FAILURE;
+                       }
+                       break;
+               }
+       }
+       return r;
+}
+
+result
+TelephonyManager::SetMuteStatus(bool setMute)
+{
+       TelSoundMuteStatus_t muteStatus;
+       result r = E_FAILURE;
+       if (setMute == true)
+       {
+               muteStatus = TAPI_SOUND_MUTE_STATUS_ON;
+       }
+       else
+       {
+               muteStatus = TAPI_SOUND_MUTE_STATUS_OFF;
+       }
+       int res = tel_set_call_mute_status(__pTapiHandle, muteStatus, &HandleCallbackResponse, this);
+       if (res == TAPI_CAUSE_SUCCESS)
+       {
+               __isMuted = setMute;
+               r = E_SUCCESS;
+       }
+       else
+       {
+               r = E_FAILURE;
+       }
+       return r;
+}
+
+bool
+TelephonyManager::IsCallMuted(void)
+{
+       return __isMuted;
+}
+
+result
+TelephonyManager::SetSpeakerStatus(bool setSpeaker)
+{
+       result r = E_FAILURE;
+       TelCallSoundPathInfo_t callSoundPathInfo;
+       __pSoundManager->SetSpeakerStatus(setSpeaker);
+       if (setSpeaker == true)
+       {
+               callSoundPathInfo.path = TAPI_SOUND_PATH_SPK_PHONE;
+       }
+       else
+       {
+               callSoundPathInfo.path = TAPI_SOUND_PATH_HANDSET;
+       }
+       callSoundPathInfo.ex_volume = TelCallSoundPathInfo_t::TAPI_SOUND_EX_VOLUME_ON;
+
+       int res = tel_set_call_sound_path(__pTapiHandle, &callSoundPathInfo, &HandleCallbackResponse, this);
+
+       if (res == TAPI_CAUSE_SUCCESS)
+       {
+               __isSpeakerOn = setSpeaker;
+               r = E_SUCCESS;
+       }
+       else
+       {
+               r = E_FAILURE;
+       }
+       return r;
+}
+
+bool
+TelephonyManager::IsSpeakerOn(void)
+{
+       return __isSpeakerOn;
+}
+
+bool
+TelephonyManager::IsSplitAllowed(void)
+{
+       // Split functionality is allowed only if a one call is present.
+       // The call can be a single call or a conference call
+       if (__pActiveCallList->GetCount() == 1)
+       {
+               return true;
+       }
+       return false;
+}
+
+void
+TelephonyManager::HandleCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData)
+{
+       //should not do anything here.
+}
+
+void
+TelephonyManager::HandleDialCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData)
+{
+       TelephonyManager* pTelManager = (TelephonyManager*) pUserData;
+       if (callBackResult != TAPI_CAUSE_SUCCESS)
+       {
+               if (pTelManager->__pDialedCall != null)
+               {
+                       delete pTelManager->__pDialedCall;
+                       pTelManager->__pDialedCall = null;
+               }
+               pTelManager->__pEventListener->HandleTelephonyError(ERROR_DIAL_FAILED);
+       }
+}
+
+void
+TelephonyManager::HandleRejectCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData)
+{
+       AppLogDebug("ENTER");
+       // This callback comes only if user has either rejected an incoming call from IncomingCallForm.
+       // or the incoming call was automatically blocked.
+       TelephonyManager* pTelManager = (TelephonyManager*) pUserData;
+       if (pData != null && callBackResult == TAPI_API_SUCCESS)
+       {
+               unsigned int rejectedCallHandle = 0;
+               memcpy(&rejectedCallHandle, pData, sizeof(TS_UINT));
+
+               //Check if incoming call is rejected
+               if (pTelManager->__pIncomingCall != null && (rejectedCallHandle == (unsigned int) pTelManager->__pIncomingCall->GetCallHandle()->ToLong()))
+               {
+                       CallInfo rejectedCallInfo;
+                       rejectedCallInfo = *(pTelManager->__pIncomingCall);
+                       delete pTelManager->__pIncomingCall;
+                       pTelManager->__pIncomingCall = null;
+
+                       //Check if number was automatically rejected using settings, then don't give any notification to user.
+                       bool showIncomingCallRejectedNotification = true;
+                       if (((pTelManager->__pSettingsManager->GetUnknownRejectStatus() == true) && (rejectedCallInfo.GetContactInfo() == null))
+                                               || (pTelManager->__pSettingsManager->IsCallToBeRejected(rejectedCallInfo.GetContactNumber()) == true))
+                       {
+                               //blocked
+                               AppLogDebug("Call blocked");
+                               showIncomingCallRejectedNotification = false;
+                               rejectedCallInfo.SetCalllogType(CALL_LOG_TYPE_VOICE_BLOCKED);
+                       }
+                       else
+                       {
+                               AppLogDebug("Call rejected");
+                               //rejected by user from incoming call form
+                               showIncomingCallRejectedNotification = true;
+                               rejectedCallInfo.SetCalllogType(CALL_LOG_TYPE_VOICE_REJECTED);
+                       }
+                       //Save rejected incoming call to call log db.
+                       pTelManager->SaveCallInfoToLogsDb(rejectedCallInfo);
+
+                       if (showIncomingCallRejectedNotification == true)
+                       {
+                               //check if the ended call was the last call
+                               bool isLastCall = (pTelManager->__pActiveCallList->GetCount() == 0);
+                               //Stop alert - started only for incoming calls which are not blocked.
+                               if(pTelManager->__pSoundManager != null)
+                               {
+                                       pTelManager->__pSoundManager->StopAlert();
+                                       //Do not call stop session if there is already a call going on
+                                       if(isLastCall == true)
+                                       {
+                                               pTelManager->__pSoundManager->StopSession();
+                                       }
+                               }
+                               //Send notification to user
+                               ArrayListT<CallInfo>* pCallList = null;
+                               if (isLastCall)
+                               {
+                                       //save 'RejectedCall' to list to show on EndCallForm
+                                       pCallList = new (std::nothrow) ArrayListT<CallInfo>();
+                                       pCallList->Construct(1);
+                                       CallInfo* pRejectedCall = new (std::nothrow) CallInfo();
+                                       *pRejectedCall = rejectedCallInfo;
+                                       pCallList->Add(*pRejectedCall);
+                               }
+                               else
+                               {
+                                       //fetch active calls to show appropriate scene
+                                       pCallList = static_cast<ArrayListT<CallInfo>*>(pTelManager->__pActiveCallList->GetValuesN());
+                               }
+                               pTelManager->__pEventListener->HandleCallDisconnected(isLastCall, *pCallList);
+                               delete pCallList;
+                               pCallList = null;
+                       }
+               }
+       }
+       else
+       {
+               pTelManager->__pEventListener->HandleTelephonyError(ERROR_REJECT_FAILED);
+       }
+       AppLogDebug("EXIT");
+}
+
+void
+TelephonyManager::HandleJoinCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData)
+{
+       TelephonyManager* pTelManager = (TelephonyManager*) pUserData;
+       if (callBackResult == TAPI_API_SUCCESS && pData != null)
+       {
+               unsigned int tempHandle = 0;
+               TelCallInfoJoinedNoti_t joinedInfoNotification;
+               CallInfo confCallInfo;
+
+               memcpy(&tempHandle, pData, sizeof(TS_UINT));
+               joinedInfoNotification.id = tempHandle;
+               CallInfo activeCall;
+               CallInfo heldCall;
+               // Use enumerator to access elements in the map
+               IListT<CallInfo>* pCallList = pTelManager->__pActiveCallList->GetValuesN();
+               result r = pCallList->GetAt(0, activeCall);
+
+               if (r == E_SUCCESS)
+               {
+                       r = pCallList->GetAt(1, heldCall);
+                       if (r == E_SUCCESS)
+                       {
+                               CallInfo* pConfCallInfo = new (std::nothrow) CallInfo();
+                               unsigned int activeCallHandle = activeCall.GetCallHandle()->ToLong();
+                               unsigned int heldCallHandle = heldCall.GetCallHandle()->ToLong();
+                               if (activeCall.IsConferenceCall() == true)
+                               {
+                                       r = E_SUCCESS;
+                                       //When joined both become active
+                                       activeCall.SetOnHold(false);
+                                       heldCall.SetOnHold(false);
+                                       *pConfCallInfo = activeCall;
+                                       pConfCallInfo->AddCallToCallerList(heldCall);
+                                       pConfCallInfo->SetCallHandle(activeCallHandle);
+                                       //Set call start time
+                                       if (pConfCallInfo->GetCallConnectTime() > heldCall.GetCallConnectTime())
+                                       {
+                                               pConfCallInfo->SetCallConnectTime(heldCall.GetCallConnectTime());
+                                               pConfCallInfo->SetCallNotificationTime(heldCall.GetCallNotificationTime());
+                                       }
+                               }
+                               else if (heldCall.IsConferenceCall() == true)
+                               {
+                                       r = E_SUCCESS;
+                                       heldCall.SetOnHold(false);
+                                       activeCall.SetOnHold(false);
+                                       *pConfCallInfo = heldCall;
+                                       pConfCallInfo->AddCallToCallerList(activeCall);
+                                       pConfCallInfo->SetCallHandle(heldCallHandle);
+                                       //Set call start time
+                                       if (pConfCallInfo->GetCallConnectTime() > activeCall.GetCallConnectTime())
+                                       {
+                                               pConfCallInfo->SetCallConnectTime(activeCall.GetCallConnectTime());
+                                               pConfCallInfo->SetCallNotificationTime(activeCall.GetCallNotificationTime());
+                                       }
+                               }
+                               else
+                               {
+                                       r = E_SUCCESS;
+                                       pConfCallInfo->SetConference(true);
+                                       heldCall.SetOnHold(false);
+                                       activeCall.SetOnHold(false);
+                                       pConfCallInfo->AddCallToCallerList(activeCall);
+                                       pConfCallInfo->AddCallToCallerList(heldCall);
+                                       pConfCallInfo->SetCallHandle(activeCallHandle);
+                                       //Set call start time
+                                       if (activeCall.GetCallConnectTime() > heldCall.GetCallConnectTime())
+                                       {
+                                               pConfCallInfo->SetCallConnectTime(heldCall.GetCallConnectTime());
+                                               pConfCallInfo->SetCallNotificationTime(heldCall.GetCallNotificationTime());
+                                       }
+                                       else
+                                       {
+                                               pConfCallInfo->SetCallConnectTime(activeCall.GetCallConnectTime());
+                                               pConfCallInfo->SetCallNotificationTime(activeCall.GetCallNotificationTime());
+                                       }
+                               }
+                               pConfCallInfo->SetCallHandle(joinedInfoNotification.id);
+                               pTelManager->__pActiveCallList->RemoveAll();
+                               //only one call in the list
+                               pTelManager->__pActiveCallList->Add(joinedInfoNotification.id, *pConfCallInfo);
+                               //notify listener that call is connected.
+                               pTelManager->__pEventListener->HandleConferenceCall(*pConfCallInfo);
+                               delete pCallList;
+                               pCallList = null;
+                       }
+               }
+       }
+       else
+       {
+               pTelManager->__pEventListener->HandleTelephonyError(ERROR_JOIN_FAILED);
+       }
+}
+
+void
+TelephonyManager::HandleSwapCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData)
+{
+       TelephonyManager* pTelManager = (TelephonyManager*) pUserData;
+       if (callBackResult == TAPI_CAUSE_SUCCESS)
+       {
+               IListT<CallInfo>* pCallList = pTelManager->__pActiveCallList->GetValuesN();
+               IListT<long>* pKeyList = pTelManager->__pActiveCallList->GetKeysN();
+               int callCount = pTelManager->__pActiveCallList->GetCount();
+               for (int index = 0; index < callCount; index++)
+               {
+                       CallInfo* pTempCallInfo = new (std::nothrow) CallInfo();
+                       pCallList->GetAt(index, *pTempCallInfo);
+                       (pTempCallInfo->IsOnHold() == false) ? pTempCallInfo->SetOnHold(true) : pTempCallInfo->SetOnHold(false);
+                       long callHandle;
+                       pKeyList->GetAt(index, callHandle);
+                       pTelManager->__pActiveCallList->SetValue(callHandle, *pTempCallInfo);
+               }
+               delete pCallList;
+               pCallList = null;
+               delete pKeyList;
+               pKeyList = null;
+               pCallList = pTelManager->__pActiveCallList->GetValuesN();
+               pTelManager->__pEventListener->HandleCallSwapOccured(*pCallList);
+       }
+       else
+       {
+               pTelManager->__pEventListener->HandleTelephonyError(ERROR_SWAP_FAILED);
+       }
+}
+
+void
+TelephonyManager::HandleEndFromConferenceCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData)
+{
+       AppLogDebug("ENTER");
+       //This callback comes if a single call is ended from Conference call.
+       TelephonyManager* pTelManager = (TelephonyManager*) pUserData;
+       bool isParticipantCallEnded = false;
+
+       if (callBackResult == TAPI_CAUSE_SUCCESS && pData != null)
+       {
+               //fetch end call handle
+               TelCallEndCnf_t callEndNotification;
+               memcpy(&callEndNotification, pData, sizeof(TelCallEndCnf_t));
+               //Fetch conference call
+               CallInfo endConfCall;
+               bool isConferenceCallFound = false;
+               IListT<CallInfo>* pCallList = pTelManager->__pActiveCallList->GetValuesN();
+               int callCount = pCallList->GetCount();
+               for (int index = 0; index < callCount; index++)
+               {
+                       pCallList->GetAt(index, endConfCall);
+                       if (endConfCall.IsConferenceCall() == true)
+                       {
+                               isConferenceCallFound = true;
+                               //Found the Conference call to be changed.
+                               break;
+                       }
+               }
+               delete pCallList;
+               pCallList = null;
+
+               //Identify the call to be ended and remove from list.
+               if (isConferenceCallFound == true)
+               {
+                       isParticipantCallEnded = pTelManager->HandleParticipantEndedFromConference(callEndNotification.id, endConfCall);
+               }
+       }
+
+       //Check if participant call or Conference call was not found, then show error
+       if (isParticipantCallEnded == false)
+       {
+               pTelManager->__pEventListener->HandleTelephonyError(ERROR_END_FROM_CONFERENCE_FAILED);
+       }
+       AppLogDebug("EXIT");
+}
+
+bool
+TelephonyManager::HandleParticipantEndedFromConference(unsigned int participantCallHandle, CallInfo& conferenceCall)
+{
+       AppLogDebug("ENTER");
+       //to check if participant call was found and ended.
+       bool isParticipantCallEnded = false;
+       //Identify the call to be ended and remove from list.
+       CallInfo callToBeEnded;
+       IListT<CallInfo>* pCallerList = conferenceCall.GetCallerList();
+       int callerCount = pCallerList->GetCount();
+       for (int index = 0; index < callerCount; index++)
+       {
+               pCallerList->GetAt(index, callToBeEnded);
+               if ((unsigned int)callToBeEnded.GetCallHandle()->ToLong() == participantCallHandle)
+               {
+                       //Identify the call to be ended and remove from conference list
+                       conferenceCall.RemoveCallFromCallerList(index);
+                       //update its status to individual call before saving to database
+                       callToBeEnded.SetConference(false);
+                       SaveCallInfoToLogsDb(callToBeEnded);
+                       isParticipantCallEnded = true;
+                       break;
+               }
+       }
+
+       if(isParticipantCallEnded == false)
+       {
+               //participant call not found and not ended
+               return isParticipantCallEnded;
+       }
+
+       unsigned int confCallHandle = (unsigned int)conferenceCall.GetCallHandle()->ToLong();
+       //Check if last participant removed. If yes, switch to single active view
+       if (conferenceCall.GetCallerListCount() == 1)
+       {
+               CallInfo callFromList;
+               pCallerList = conferenceCall.GetCallerList();
+               pCallerList->GetAt(0, callFromList);
+               //construct a new single active call
+               CallInfo* pActiveCall = new (std::nothrow) CallInfo();
+               *pActiveCall = callFromList;
+               //update conference status and Hold status
+               pActiveCall->SetConference(false);
+               pActiveCall->SetOnHold(conferenceCall.IsOnHold());
+
+               __pActiveCallList->Remove(confCallHandle);
+               __pActiveCallList->Add(pActiveCall->GetCallHandle()->ToLong(), *pActiveCall);
+               pActiveCall = null;
+               //using the callConnected to switch to single active screen
+               //or update multiple active call screen
+               IListT<CallInfo>* pActiveCallList = __pActiveCallList->GetValuesN();
+               __pEventListener->HandleCallConnected(*pActiveCallList);
+               delete pActiveCallList;
+               pActiveCallList = null;
+       }
+       else
+       {
+               CallInfo callFromList;
+               pCallerList = conferenceCall.GetCallerList();
+               pCallerList->GetAt(0, callFromList);
+               //construct a new conference call
+               CallInfo* pConfCallInfo = new (std::nothrow) CallInfo();
+               *pConfCallInfo = conferenceCall;
+               if (confCallHandle == participantCallHandle)
+               {
+                       //Call Handle is same as conf call handle, so need to change conf call handle
+                       __pActiveCallList->Remove(confCallHandle);
+                       int newConfCallHandle = callFromList.GetCallHandle()->ToLong();
+                       pConfCallInfo->SetCallHandle(newConfCallHandle);
+                       __pActiveCallList->Add(newConfCallHandle, *pConfCallInfo);
+               }
+               else
+               {
+                       __pActiveCallList->SetValue(confCallHandle, *pConfCallInfo);
+               }
+               __pEventListener->HandleConferenceChange();
+       }
+       AppLogDebug("EXIT");
+       return isParticipantCallEnded;
+}
+
+void
+TelephonyManager::HandleSplitFromConferenceCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData)
+{
+       TelephonyManager* pTelManager = (TelephonyManager*) pUserData;
+       if (callBackResult == TAPI_CAUSE_SUCCESS && pData != null)
+       {
+               TelCallSplitCnf_t callSplitNotification;
+               memcpy(&callSplitNotification, pData, sizeof(TelCallSplitCnf_t));
+               int confCallIndex = -1;
+               CallInfo endConfCall;
+               bool isConferenceCallFound = false;
+
+               IListT<CallInfo>* pCallList = pTelManager->__pActiveCallList->GetValuesN();
+               int callCount = pCallList->GetCount();
+               for (int index = 0; index < callCount; index++)
+               {
+                       pCallList->GetAt(index, endConfCall);
+                       if (endConfCall.IsConferenceCall() == true)
+                       {
+                               isConferenceCallFound = true;
+                               confCallIndex = index;
+                               //Found the Conference call to be ended.
+                               break;
+                       }
+               }
+
+               if (isConferenceCallFound == false)
+               {
+                       delete pCallList;
+                       pCallList = null;
+                       return;
+               }
+               delete pCallList;
+               pCallList = null;
+               //Identify the call to be ended and remove from list on API success
+               CallInfo callToBeEnded;
+               pCallList = endConfCall.GetCallerList();
+               callCount = pCallList->GetCount();
+               for (int index = 0; index < callCount; index++)
+               {
+                       pCallList->GetAt(index, callToBeEnded);
+                       if ((unsigned int)callToBeEnded.GetCallHandle()->ToLong() == callSplitNotification.id)
+                       {
+                               //Identified the call to be ended and remove from conference list
+                               //Add this to the active call list
+                               endConfCall.RemoveCallFromCallerList(index);
+                               break;
+                       }
+               }
+               unsigned int confCallHandle = (unsigned int)endConfCall.GetCallHandle()->ToLong();
+               //Set the hold flags correctly and make the changes to the active call list
+               if (endConfCall.GetCallerListCount() == 1)
+               {
+                       //Set hold for the other single call
+                       // and add to the list
+                       CallInfo callFromList;
+                       pCallList = endConfCall.GetCallerList();
+                       pCallList->GetAt(0, callFromList);
+                       CallInfo* pHeldCall = new (std::nothrow) CallInfo();
+                       *pHeldCall = callFromList;
+                       pHeldCall->SetConference(false);
+                       pHeldCall->SetOnHold(true);
+                       pTelManager->__pActiveCallList->Remove(confCallHandle);
+                       pTelManager->__pActiveCallList->Add(pHeldCall->GetCallHandle()->ToLong(), *pHeldCall);
+                       pHeldCall = null;
+               }
+               else
+               {
+                       //Set hold flag for conference call
+                       endConfCall.SetOnHold(true);
+                       CallInfo callFromList;
+                       pCallList = endConfCall.GetCallerList();
+                       pCallList->GetAt(0, callFromList);
+
+                       CallInfo* pConfCallInfo = new (std::nothrow) CallInfo();
+                       *pConfCallInfo = endConfCall;
+                       if (confCallHandle == callSplitNotification.id)
+                       {
+                               //Call Handle is same as conf call handle.
+                               //Change conf call handle
+                               pTelManager->__pActiveCallList->Remove(confCallHandle);
+                               int tmpCallHandle = callFromList.GetCallHandle()->ToLong();
+                               pConfCallInfo->SetCallHandle(tmpCallHandle);
+                               pTelManager->__pActiveCallList->Add(callFromList.GetCallHandle()->ToLong(), *pConfCallInfo);
+                       }
+                       else
+                       {
+                               pTelManager->__pActiveCallList->Remove(confCallHandle);
+                               pTelManager->__pActiveCallList->Add(confCallHandle, *pConfCallInfo);
+                       }
+               }
+               //Add the new active call to active call list
+               CallInfo* pActiveCall = new (std::nothrow) CallInfo();
+               *pActiveCall = callToBeEnded;
+               pActiveCall->SetConference(false);
+               pActiveCall->SetOnHold(false);
+               pTelManager->__pActiveCallList->Remove(pActiveCall->GetCallHandle()->ToLong());
+               pTelManager->__pActiveCallList->Add(pActiveCall->GetCallHandle()->ToLong(), *pActiveCall);
+               pActiveCall = null;
+               //using the callConnected to switch to Multiple active screen
+               pCallList = pTelManager->__pActiveCallList->GetValuesN();
+               pTelManager->__pEventListener->HandleCallConnected(*pCallList);
+               pCallList = null;
+       }
+       else
+       {
+               pTelManager->__pEventListener->HandleTelephonyError(ERROR_SPLIT_FROM_CONFERENCE_FAILED);
+       }
+}
+
+void
+TelephonyManager::HandleEndConferenceCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData)
+{
+       AppLog("ENTER");
+       //This callback comes only if a conference call is ended by user.
+       TelephonyManager* pTelManager = (TelephonyManager*) pUserData;
+       if (callBackResult == TAPI_CAUSE_SUCCESS && pData != null)
+       {
+               //fetch ended confCall details
+               result r = E_FAILURE;
+               CallInfo endConfCallInfo;
+               IListT<CallInfo>* pActiveCallList = pTelManager->__pActiveCallList->GetValuesN();
+               if(pActiveCallList != null && pActiveCallList->GetCount() > 0)
+               {
+                       for (int index = 0; index < pActiveCallList->GetCount(); index++)
+                       {
+                               r = pActiveCallList->GetAt(index, endConfCallInfo);
+                               if(r == E_SUCCESS && endConfCallInfo.IsConferenceCall() == true)
+                               {
+                                       //conference call found.
+                                       r = E_SUCCESS;
+                                       break;
+                               }
+                               else
+                               {
+                                       r = E_FAILURE;
+                               }
+                       }
+               }
+               delete pActiveCallList;
+               pActiveCallList = null;
+
+               //check if no conference call found, then return.
+               if(r == E_FAILURE)
+               {
+                       return;
+               }
+               //remove the conference call handle from active call list to avoid any processing in HandleIdleCallback().
+               pTelManager->__pActiveCallList->Remove(endConfCallInfo.GetCallHandle()->ToLong());
+               //Save "End" Conf. call info to call log database
+               pTelManager->SaveCallInfoToLogsDb(endConfCallInfo);
+
+               //check if the ended call was the last call and show notification to user
+               bool isLastCall = (pTelManager->__pActiveCallList->GetCount() == 0);
+               ArrayListT<CallInfo>* pCallList = null;
+               if (isLastCall)
+               {
+                       pTelManager->__pSoundManager->SetlastEndedConferenceCall();
+                       //stop sound session
+                       pTelManager->__pSoundManager->StopSession();
+                       //send empty call list to show dialer or call log screen
+                       pCallList = new (std::nothrow) ArrayListT<CallInfo>();
+               }
+               else
+               {
+                       //fetch active calls to show appropriate scene
+                       pCallList = static_cast<ArrayListT<CallInfo>*>(pTelManager->__pActiveCallList->GetValuesN());
+               }
+               //notify listener that call is disconnected.
+               pTelManager->__pEventListener->HandleCallDisconnected(isLastCall, *pCallList);
+               delete pCallList;
+               pCallList = null;
+       }
+       else
+       {
+               pTelManager->__pEventListener->HandleTelephonyError(ERROR_END_CALL_FAILED);
+       }
+       AppLog("EXIT");
+}
+
+void
+TelephonyManager::HandleIdleCallBack(void* pData)
+{
+       AppLogDebug("ENTER");
+       //This callback comes when any type of calls are ended
+       //We do NOT handle below scenarios here -
+       //1) In incoming call scenarios, if we end any active calls - handled in "AcceptCall()".
+       //2) Incoming call automatically blocked and rejection by user scenarios are handled in "HandleRejectCallbackResponse()".
+       //3) End conference call is handled in "HandleEndConferenceCallbackResponse()".
+       //4) End Single Call from Conference call by user is handled in "HandleEndFromConferenceCallbackResponse()".
+       //5) End Single Call from Conference call using eventInjector is diverted to "HandleParticipantEndedFromConference()".
+       //BUT, we do handle below scenarios here -
+       //1) "MISSED" incoming call scenario here i.e incoming call is rejected by other caller.
+       //2) an "unconnected" dialed call is ended by caller or other party.
+       //3) Any normal active calls(NOT conference calls) ended by user or by other party.
+
+       if(__pSoundManager->GetLastConferenceCall() == false)
+       {
+               __pSoundManager->SetDisconnectTone();
+       }
+
+       TelCallStatusIdleNoti_t idleNotification;
+       memcpy(&idleNotification, pData, sizeof(TelCallStatusIdleNoti_t));
+       //handle end call event, show next screen
+       unsigned int endCallHandle = idleNotification.id;
+
+       //empty active call list or no dialed or incoming calls - ignore this event
+       IListT<CallInfo>* pActiveCallList = __pActiveCallList->GetValuesN();
+       if((pActiveCallList == null || pActiveCallList->GetCount() <= 0) && __pDialedCall == null && __pIncomingCall == null)
+       {
+               delete pActiveCallList;
+               AppLogDebug("EXIT - no calls exist");
+               return;
+       }
+
+       //Check if ended call was among conference caller list,
+       //then divert event to "HandleParticipantEndedFromConference()"
+       CallInfo confCallInfo;
+       bool isConferenceCallChanged = false;
+       for (int index = 0; index < pActiveCallList->GetCount(); index++)
+       {
+               //fetch conference call
+               result r = pActiveCallList->GetAt(index, confCallInfo);
+               if (r == E_SUCCESS && confCallInfo.IsConferenceCall() == true)
+               {
+                       //Conference call found - check if ended call is a participant
+                       isConferenceCallChanged = HandleParticipantEndedFromConference(endCallHandle, confCallInfo);
+                       break;
+               }
+       }
+       delete pActiveCallList;
+       pActiveCallList = null;
+       if (isConferenceCallChanged == true)
+       {
+               //end call event handled - conference call will now either remain as conf. call
+               //or become single active call, if it has only 1 participant left.
+               __pSoundManager->SetSoundMode(SOUND_MODE_VOICE);
+               return;
+       }
+
+       //check if ended call was among the active call list and not a conference call
+       CallInfo endCallInfo;
+       result r = __pActiveCallList->GetValue(endCallHandle, endCallInfo);
+       if (r == E_SUCCESS)
+       {
+               bool isHandled = HandleEndNormalActiveCall(endCallInfo);
+               if (isHandled == true)
+               {
+                       __pSoundManager->SetSoundMode(SOUND_MODE_VOICE);
+                       return;
+               }
+       }
+
+       //Check if dialed call is rejected by other party
+       bool isDialedCallEnded = ((__pDialedCall != null)  && (((unsigned int)__pDialedCall->GetCallHandle()->ToLong()) == idleNotification.id));
+       //Check if "missed" incoming call is ended
+       bool isMissedIncomingCallEnded = (__pIncomingCall != null && ((unsigned int)__pIncomingCall->GetCallHandle()->ToLong() == idleNotification.id));
+       if (isDialedCallEnded == true || isMissedIncomingCallEnded == true)
+       {
+               //It comes here only if the ended call was either a "unconnected" dialed call or an "Missed" incoming call.
+               bool isLastCall = (__pActiveCallList->GetCount() == 0);
+
+               ArrayListT<CallInfo>* pCallList = null;
+               //Check if dialed call was ended
+               if (isDialedCallEnded == true)
+               {
+                       AppLogDebug("Dialed Call Ended");
+                       //Call Ended is the dialed call
+                       endCallInfo = *(__pDialedCall);
+                       delete __pDialedCall;
+                       __pDialedCall = null;
+               }
+               else
+               {
+                       //Here, only "Missed" Incoming call ended by other caller is handled.
+                       AppLogDebug("Missed Call Ended");
+                       __pSoundManager->StopAlert();
+                       endCallInfo = *(__pIncomingCall);
+                       delete __pIncomingCall;
+                       __pIncomingCall = null;
+                       //update missed status
+                       endCallInfo.SetCalllogType(CALL_LOG_TYPE_VOICE_MISSED);
+               }
+               //save ended call to call log db.
+               SaveCallInfoToLogsDb(endCallInfo);
+
+               //notify listener that call is disconnected.
+               if (isLastCall == true)
+               {
+                       __pSoundManager->StopSession();
+                       pCallList = new (std::nothrow) ArrayListT<CallInfo>();
+                       pCallList->Construct(1);
+                       if (isMissedIncomingCallEnded == false)
+                       {
+                               //save to list to show EndCallForm
+                               pCallList->Add(endCallInfo);
+                       }
+                       __pSoundManager->GetTimer()->Cancel();
+
+               }
+               else
+               {
+                       pCallList = static_cast<ArrayListT<CallInfo>*>(__pActiveCallList->GetValuesN());
+               }
+               __pEventListener->HandleCallDisconnected(isLastCall, *pCallList);
+               delete pCallList;
+               pCallList = null;
+       }
+       __pSoundManager->SetSoundMode(SOUND_MODE_VOICE);
+       AppLogDebug("EXIT");
+}
+
+bool
+TelephonyManager::HandleEndNormalActiveCall(CallInfo& endCallInfo)
+{
+       // This function gets called only from HandleIdleCallback(),
+       // to handle disconnection of normal active calls.
+       if (endCallInfo.IsConferenceCall() == false)
+       {
+               //remove the call handle from active call list
+               __pActiveCallList->Remove(endCallInfo.GetCallHandle()->ToLong());
+               //check if the ended call was the last call and show notification to user
+               bool isLastCall = (__pActiveCallList->GetCount() == 0);
+               ArrayListT<CallInfo>* pCallList = null;
+               if (isLastCall)
+               {
+                       //stop sound session
+                       __pSoundManager->StopSession();
+                       //save "End" CallInfo to list to show EndCallForm
+                       pCallList = new (std::nothrow) ArrayListT<CallInfo>();
+                       pCallList->Construct(1);
+                       pCallList->Add(endCallInfo);
+               }
+               else
+               {
+                       //fetch active calls to show appropriate scene
+                       pCallList = static_cast<ArrayListT<CallInfo>*>(__pActiveCallList->GetValuesN());
+               }
+
+               //Save "End" call info to call log database
+               SaveCallInfoToLogsDb(endCallInfo);
+               //notify listener that call is disconnected.
+               __pEventListener->HandleCallDisconnected(isLastCall, *pCallList);
+               delete pCallList;
+               pCallList = null;
+               return true;
+       }
+       return false;
+}
+
+void
+TelephonyManager::HandleDialingCallBack(void* pData)
+{
+       unsigned int tempHandle = 0;
+       TelCallStatusDialingNoti_t dialingNotification;
+       memcpy(&tempHandle, pData, sizeof(TS_UINT));
+       dialingNotification.id = tempHandle;
+       //check if callback is for different dialed call
+       //Dont check for call handle, since this is the first time, we get call handle for a dialed call.
+       if (__pDialedCall == null)
+       {
+               //construct new dialed call
+               __pDialedCall = new (std::nothrow) CallInfo();
+
+               TelCallStatus_t callStatus;
+               int res = tel_get_call_status(__pTapiHandle, dialingNotification.id, &callStatus);
+               if (res == TAPI_CAUSE_SUCCESS)
+               {
+                       //save phone number
+                       String contactNumber(callStatus.pNumber);
+                       __pDialedCall->SetContactNumber(contactNumber);
+                       //set emergency state
+                       if(callStatus.CallType == TAPI_CALL_TYPE_E911)
+                       {
+                               __pDialedCall->SetEmergency(true);
+                       }
+                       else
+                       {
+                               __pDialedCall->SetEmergency(false);
+                       }
+                       //save contact info
+                       FetchContactInfoForNumber(__pDialedCall->GetContactNumber());
+                       if (__pCachedContact != null)
+                       {
+                               __pDialedCall->SetContactInfo(*(__pCachedContact));
+                       }
+               }
+       }
+       //set call handle for dialed call
+       __pDialedCall->SetCallHandle(dialingNotification.id);
+       __pDialedCall->SetCalllogType(CALL_LOG_TYPE_VOICE_OUTGOING);
+
+       //set call notification time.
+       long long startTime = 0;
+       SystemTime::GetTicks(startTime);
+       __pDialedCall->SetCallNotificationTime(startTime);
+}
+
+void
+TelephonyManager::HandleActiveCallBack(void* pData)
+{
+       // This callback comes whenever any new call is connected
+       // Or, any "Held" call is activated (we ignore activation of "Held" calls).
+       unsigned int newCallHandle = 0;
+       TelCallStatusActiveNoti_t activeNotification;
+       memcpy(&newCallHandle, pData, sizeof(TS_UINT));
+       activeNotification.id = newCallHandle;
+       IListT<CallInfo>* pCallList = __pActiveCallList->GetValuesN();
+
+       //Check if the "Held" call was activated, i.e it is already present in already activated calls list.
+       bool toHandleEvent = true;
+       for (int callIndex = 0; (callIndex < pCallList->GetCount() && toHandleEvent == true); callIndex++ )
+       {
+               CallInfo tempCallInfo;
+               pCallList->GetAt(callIndex, tempCallInfo);
+               unsigned int tempCallHandle = tempCallInfo.GetCallHandle()->ToLong();
+               //Check if active callback came for "HandleJoinCallbackResponse"
+               //or for "UnHold Conference Call or normal call".
+               if(tempCallInfo.IsConferenceCall() == true)
+               {
+                       if (tempCallHandle == activeNotification.id)
+                       {
+                               toHandleEvent = false;
+                       }
+                       else
+                       {
+                               //check individual participants of conf call
+                               IListT<CallInfo>* pConfCallList = tempCallInfo.GetCallerList();
+                               int confCallCount  = pConfCallList->GetCount();
+                               for (int callIndex = 0; (callIndex < confCallCount && toHandleEvent == true); callIndex++)
+                               {
+                                       CallInfo confCallerInfo;
+                                       pConfCallList->GetAt(callIndex, confCallerInfo);
+                                       unsigned int confCallerHandle = confCallerInfo.GetCallHandle()->ToLong();
+                                       if (confCallerHandle == activeNotification.id)
+                                       {
+                                               toHandleEvent = false;
+                                       }
+                               }
+                       }
+               }
+               else if(tempCallHandle == activeNotification.id)
+               {
+                       //If normal call is UnHold
+                       toHandleEvent = false;
+               }
+       }
+
+       //check if we need to handle this event.
+       if(toHandleEvent == true)
+       {
+               //Here it comes, only if either new dialed or incoming call was connected.
+               HandleCallConnected( activeNotification.id);
+       }
+       delete pCallList;
+       pCallList = null;
+}
+
+void
+TelephonyManager::HandleCallConnected(unsigned int connectedCallHandle)
+{
+       //Here it comes, only if either new dialed or incoming call was connected.
+       //This function should be called only from "HandleActiveCallback()".
+       CallInfo* pConnectedCall = null;
+       //to check if incoming call was connected
+       bool isIncomingCallConnected = false;
+
+       __pSoundManager->SetConnectTone();
+       //Check if dialed call is connected.
+       if ((__pDialedCall != null) && (connectedCallHandle == (unsigned int)__pDialedCall->GetCallHandle()->ToLong()))
+       {
+               pConnectedCall = __pDialedCall;
+               __pDialedCall = null;
+       }
+       //Check if connected call is incoming call.
+       else if (__pIncomingCall != null && (connectedCallHandle == (unsigned int)__pIncomingCall->GetCallHandle()->ToLong()))
+       {
+               pConnectedCall = __pIncomingCall;
+               __pIncomingCall = null;
+               isIncomingCallConnected = true;
+       }
+       else
+       {
+               // this is just for safety. This scenario should never come.
+               // Otherwise Correct the code in some other function, if it comes here.
+               AppLogDebug("Error - Connected call was neither one of active calls nor it was dialed or incoming call");
+               //Construct a new CallInfo object for call
+               pConnectedCall = new (std::nothrow) CallInfo();
+               pConnectedCall->SetCallHandle(connectedCallHandle);
+
+               TelCallStatus_t callStatus;
+               int res = tel_get_call_status(__pTapiHandle, connectedCallHandle, &callStatus);
+               if (res == TAPI_CAUSE_SUCCESS)
+               {
+                       String contactNumber(callStatus.pNumber);
+                       pConnectedCall->SetContactNumber(contactNumber);
+                       //set emergency state
+                       if(callStatus.CallType == TAPI_CALL_TYPE_E911)
+                       {
+                               pConnectedCall->SetEmergency(true);
+                       }
+                       else
+                       {
+                               pConnectedCall->SetEmergency(false);
+                       }
+                       //set call notification time
+                       long long startTime = 0;
+                       SystemTime::GetTicks(startTime);
+                       pConnectedCall->SetCallNotificationTime(startTime);
+                       if (callStatus.bMoCall == true)
+                       {
+                               pConnectedCall->SetCalllogType(CALL_LOG_TYPE_VOICE_OUTGOING);
+                       }
+                       else
+                       {
+                               pConnectedCall->SetCalllogType(CALL_LOG_TYPE_VOICE_INCOMING);
+                               isIncomingCallConnected = true;
+                       }
+               }
+               //delete any dialed or incoming call objects
+               delete __pDialedCall;
+               __pDialedCall = null;
+               delete __pIncomingCall;
+               __pIncomingCall = null;
+       }
+
+       //fetch contact info for connected call & it is not a hidden call
+       if (pConnectedCall->GetContactInfo() == null && pConnectedCall->GetContactNumber().IsEmpty() == false)
+       {
+               FetchContactInfoForNumber(pConnectedCall->GetContactNumber());
+               if (__pCachedContact != null)
+               {
+                       pConnectedCall->SetContactInfo(*(__pCachedContact));
+               }
+       }
+       //set Call connect time for newly connected call
+       long long startTime = 0;
+       SystemTime::GetTicks(startTime);
+       pConnectedCall->SetCallConnectTime(startTime);
+       if(GetCurrentCallCount() == 0)
+       {
+               __pSoundManager->SetMinuteReminderTone();
+       }
+
+
+       //transfer ownership to Active calls list
+       __pActiveCallList->Add(connectedCallHandle, *(pConnectedCall));
+       pConnectedCall = null;
+
+       //notify listener that call is connected.
+       IListT<CallInfo>* pCallList = __pActiveCallList->GetValuesN();
+       __pSoundManager->SetSoundMode(SOUND_MODE_VOICE);
+       __pEventListener->HandleCallConnected(*pCallList);
+       if (isIncomingCallConnected == true)
+       {
+               __pSoundManager->StopAlert();
+       }
+       delete pCallList;
+       pCallList = null;
+}
+
+bool
+TelephonyManager::CheckIncomingCallToBeRejected(CallInfo* pIncomingCallInfo)
+{
+       int callHandle = pIncomingCallInfo->GetCallHandle()->ToLong();
+       String contactNumber(L"");
+       contactNumber.Append(pIncomingCallInfo->GetContactNumber());
+       //Check if "reject unknown calls" is set and contact number is not present in AddressBook
+       //or if contact number is blacklisted
+       if (((__pSettingsManager->GetUnknownRejectStatus() == true) && (pIncomingCallInfo->GetContactInfo() == null))
+                       || (__pSettingsManager->IsCallToBeRejected(contactNumber) == true))
+       {
+               AnswerCall(callHandle,false);
+               return true;
+       }
+       return false;
+}
+
+void
+TelephonyManager::HandleCallback(TapiHandle* pHandle, const char* pNotiId, void* pData, void* pUserData)
+{
+       unsigned int tempHandle = 0;
+       TelephonyManager* pTelManager = (TelephonyManager*) pUserData;
+       if (pTelManager->__pSoundManager == null)
+       {
+               AppLog("Creating Sound Manager");
+               pTelManager->__pSoundManager = new (std::nothrow) SoundManager();
+       }
+       //Handle telephony events
+       if (strcmp(pNotiId, TAPI_NOTI_VOICE_CALL_STATUS_IDLE) == 0)
+       {
+               pTelManager->HandleIdleCallBack(pData);
+       }
+       else if (strcmp(pNotiId, TAPI_NOTI_VOICE_CALL_STATUS_ACTIVE) == 0)
+       {
+               pTelManager->__pSoundManager->StartSession();
+               pTelManager->HandleActiveCallBack(pData);
+       }
+       else if (strcmp(pNotiId, TAPI_NOTI_VOICE_CALL_STATUS_DIALING) == 0)
+       {
+               pTelManager->HandleDialingCallBack(pData);
+       }
+       else
+       {
+               memcpy(&tempHandle, pData, sizeof(TS_UINT));
+       }
+}
+
+CallInfo*
+TelephonyManager::GetConferenceCallInfoN(void)
+{
+       CallInfo* pConfCallInfo = null;
+
+       IListT<CallInfo>* pCallList = __pActiveCallList->GetValuesN();
+       int callCount = pCallList->GetCount();
+       for (int index = 0; index < callCount; index++)
+       {
+               CallInfo callInfo;
+               pCallList->GetAt(index, callInfo);
+               if (callInfo.IsConferenceCall() == true)
+               {
+                       pConfCallInfo = new (std::nothrow) CallInfo();
+                       *pConfCallInfo = callInfo;
+                       //Found the Conference call
+                       break;
+               }
+       }
+       delete pCallList;
+       pCallList = null;
+
+       return pConfCallInfo;
+}
+
+IListT<CallInfo>*
+TelephonyManager::GetCallListN(void)
+{
+       ArrayListT<CallInfo>* pCallList = null;
+       if (__pActiveCallList != null)
+       {
+               pCallList = static_cast<ArrayListT<CallInfo>*>(__pActiveCallList->GetValuesN());
+       }
+       return pCallList;
+}
+
+int
+TelephonyManager::GetCurrentCallCount(void)
+{
+       if (__pActiveCallList != null)
+       {
+               return __pActiveCallList->GetCount();
+       }
+       return 0;
+}
+
+void
+TelephonyManager::StartAlert(CallInfo& incomingCallInfo)
+{
+       String contactRingTone(L"");
+       String contactNumber = incomingCallInfo.GetContactNumber();
+       //check if not hidden call
+       if(contactNumber.IsEmpty() == false)
+       {
+               //fetch contact info from Db
+               Contact* foundContact = GetContactN(contactNumber);
+               if(foundContact != null)
+               {
+                       //fetch custom ringtone for contact
+                       result r = foundContact->GetValue(CONTACT_PROPERTY_ID_RINGTONE, contactRingTone);
+                       AppLog("ringtone fetched - r = %d", r);
+                       delete foundContact;
+                       foundContact = null;
+               }
+       }
+       __pSoundManager->StartAlert(contactRingTone);
+}
+
+void
+TelephonyManager::StopAlert(void)
+{
+       __pSoundManager->StopAlert();
+}
+
+result
+TelephonyManager::CheckValidTelePhoneNumber(const String& contactNumber)
+{
+       result r = E_SUCCESS;
+       if (contactNumber.GetLength() > TAPI_CALL_DIALDIGIT_LEN_MAX)
+       {
+               r = E_FAILURE;
+       }
+       //TODO: check if valid phone number else return error message
+       return r;
+}
+
+result
+TelephonyManager::CheckIfMOCallIsPossible()
+{
+       result r = E_SUCCESS;
+
+       //Check modem power status
+       int modemStatus = 0;
+       int errorCode = tel_check_modem_power_status(__pTapiHandle, &modemStatus);
+       if (errorCode != TAPI_API_SUCCESS || modemStatus == TAPI_PHONE_POWER_STATUS_OFF
+                       || modemStatus == TAPI_PHONE_POWER_STATUS_ERROR)
+       {
+               r = E_FAILURE;
+       }
+       else
+       {
+               TelSimCardStatus_t simStatus;
+               int simChangedStatus;
+               //fetch sim initialization status
+               int errorCode = tel_get_sim_init_info(__pTapiHandle, &simStatus, &simChangedStatus);
+               if (errorCode != TAPI_API_SUCCESS)
+               {
+                       r = E_FAILURE;
+               }
+               else
+               {
+                       switch (simStatus)
+                       {
+                       case TAPI_SIM_STATUS_SIM_INIT_COMPLETED: // Sim Initialization ok
+                               r = E_SUCCESS;
+                               break;
+
+                       case TAPI_SIM_STATUS_UNKNOWN: //initial state
+                       case TAPI_SIM_STATUS_CARD_NOT_PRESENT: //Card not present
+                       case TAPI_SIM_STATUS_CARD_REMOVED: //Card removed
+                       case TAPI_SIM_STATUS_CARD_ERROR: // Bad card / On the fly, SIM gone bad
+                               //TODO: might want to set different error code, to give proper message to user
+                               r = E_FAILURE;
+                               break;
+                       default:
+                               r = E_FAILURE;
+                               break;
+                       }
+               }
+       }
+       return r;
+}
+
+bool
+TelephonyManager::CheckIfMOCallIsEmergency(const String& contactNumber, bool isSimInitialized)
+{
+       //TODO: extract actual telephone number from contactNumber
+       //by deleting prefix,'P','W', etx.
+
+       bool isEmergency = false;
+       //conversion "contactNumber" to char*
+       const wchar_t* pContact = contactNumber.GetPointer();
+       int len = contactNumber.GetLength() + 1;
+       char* pNumber = new (std::nothrow) char[len];
+       wcstombs(pNumber, pContact, len);
+
+       if(isSimInitialized)
+       {
+               //used to get Ecc information for 2G and 3G.
+               TelSimEccList_t simEccList;
+               memset(&simEccList, 0x00, sizeof(TelSimEccList_t));
+               //Check if given number matches the sim card's emergency numbers
+               int errorCode = tel_get_sim_ecc(__pTapiHandle, &simEccList);
+               if (errorCode == TAPI_API_SUCCESS && simEccList.ecc_count > 0)
+               {
+                       for (int index = 0; index < simEccList.ecc_count; index++)
+                       {
+                               if ((strcmp(pNumber, simEccList.list[index].number) == 0))
+                               {
+                                       isEmergency = true;
+                               }
+                       }
+               }
+       }
+       else
+       {
+               //TODO: check if we need to also check SOS call numbers, if sim not present.
+       }
+
+       delete[] pNumber;
+       pNumber = null;
+       return isEmergency;
+}
+
+result
+TelephonyManager::FetchContactInfoForNumber(const String& phoneNumberStr)
+{
+       result r = E_FAILURE;
+
+       //delete previously cached data
+       if (__pCachedContact != null)
+       {
+               delete __pCachedContact;
+               __pCachedContact = null;
+       }
+
+       //Searches contacts by phone number.
+       IList* pContactList = __pAddressBook->SearchContactsByPhoneNumberN(phoneNumberStr);
+       if (pContactList == null || IsFailed(GetLastResult()))
+       {
+               return r;
+       }
+
+       //Fetch the contact's info to be displayed
+       IEnumerator* pContactEnum = pContactList->GetEnumeratorN();
+       while ((E_SUCCESS == pContactEnum->MoveNext()) && (__pCachedContact == null))
+       {
+               Contact* pContact = static_cast<Contact*>(pContactEnum->GetCurrent());
+
+               IList* pPhoneNumberList = pContact->GetValuesN(CONTACT_MPROPERTY_ID_PHONE_NUMBERS);
+               if (pPhoneNumberList != null)
+               {
+                       IEnumerator* pPhoneEnum = pPhoneNumberList->GetEnumeratorN();
+                       while (E_SUCCESS == pPhoneEnum->MoveNext())
+                       {
+                               PhoneNumber* pPhoneNumber = (PhoneNumber*) pPhoneEnum->GetCurrent();
+                               //Check if this is the correct contact
+                               if (pPhoneNumber->GetPhoneNumber().Equals(phoneNumberStr))
+                               {
+                                       //save newly fetched contact info.
+                                       __pCachedContact = new (std::nothrow) Contact(*pContact);
+                                       r = E_SUCCESS;
+                                       break;
+                               }
+                       }
+                       delete pPhoneEnum;
+                       pPhoneNumberList->RemoveAll(true);
+                       delete pPhoneNumberList;
+               }
+       }
+       delete pContactEnum;
+       pContactList->RemoveAll(true);
+       delete pContactList;
+
+       return r;
+}
+
+Contact*
+TelephonyManager::GetContactN(const String& phoneNumber)
+{
+       result r = FetchContactInfoForNumber(phoneNumber);
+       if (!IsFailed(r))
+       {
+               return new (std::nothrow) Contact(*__pCachedContact);
+       }
+       return null;
+}
+
+CallInfo*
+TelephonyManager::FetchIncomingCallHandleN(const String& callHandle, const String& contactNumber)
+{
+       if(__pIncomingCall != null)
+       {
+               delete __pIncomingCall;
+               __pIncomingCall = null;
+       }
+
+       if(callHandle.IsEmpty() == false)
+       {
+               int incomingHandle;
+               Integer::Parse(callHandle,incomingHandle);
+               //This API call is synchronous
+               TelCallStatus_t callStatus;
+               int errCode = tel_get_call_status(__pTapiHandle, incomingHandle, &callStatus);
+               if (errCode != TAPI_API_SUCCESS)
+               {
+                       AppLogDebug("tel_get_call_status failed");
+                       return null;
+               }
+               //construct incoming call info object
+               __pIncomingCall = new (std::nothrow) CallInfo();
+               __pIncomingCall->SetCallHandle(incomingHandle);
+
+               //contact number
+               String phoneNumber(contactNumber);
+               if(phoneNumber.IsEmpty() == true)
+               {
+                       phoneNumber.Append(callStatus.pNumber);
+               }
+               __pIncomingCall->SetContactNumber(phoneNumber);
+               //set emergency state
+               if(callStatus.CallType == TAPI_CALL_TYPE_E911)
+               {
+                       __pIncomingCall->SetEmergency(true);
+               }
+               else
+               {
+                       __pIncomingCall->SetEmergency(false);
+               }
+               //set start time, when call is connected
+               long long startTime = 0;
+               SystemTime::GetTicks(startTime);
+               __pIncomingCall->SetCallNotificationTime(startTime);
+               __pIncomingCall->SetCalllogType(CALL_LOG_TYPE_VOICE_INCOMING);
+       }
+       else
+       {
+               //TODO: This 'else' block can be removed once AppControl request API is stabilized.
+               //This API call is synchronous and 'HandleIncomingCallStatusCallBack' is called for each active call.
+               int errCode = tel_get_call_status_all(__pTapiHandle, &HandleIncomingCallStatusCallBack, this);
+               if (errCode != TAPI_API_SUCCESS)
+               {
+                       return null;
+               }
+       }
+
+       if(__pIncomingCall != null)
+       {
+               //set call notification time
+               long long startTime = 0;
+               SystemTime::GetTicks(startTime);
+               __pIncomingCall->SetCallNotificationTime(startTime);
+
+               if(__pIncomingCall->GetContactNumber().IsEmpty() == false)
+               {
+                       //fetch contact info
+                       FetchContactInfoForNumber(__pIncomingCall->GetContactNumber());
+                       if (__pCachedContact != null)
+                       {
+                               __pIncomingCall->SetContactInfo(*__pCachedContact);
+                       }
+               }
+
+               //construct a new callinfo object to pass its ownership to caller.
+               CallInfo* pNewIncomingCall = new (std::nothrow) CallInfo();
+               *pNewIncomingCall = *__pIncomingCall;
+               return pNewIncomingCall;
+       }
+       //return null, if no incoming call found
+       return null;
+}
+
+void
+TelephonyManager::HandleIncomingCallStatusCallBack(TelCallStatus_t* pCallStatus, void* pUserData)
+{
+       TelephonyManager* pTelManager = (TelephonyManager*) pUserData;
+       if (pCallStatus != null && pCallStatus->bMoCall == false
+                       && ((pCallStatus->CallState == TAPI_CALL_STATE_INCOMING)
+                                       || (pCallStatus->CallState == TAPI_CALL_STATE_WAITING)))
+       {
+               //construct incoming call details
+               pTelManager->__pIncomingCall = new (std::nothrow) CallInfo();
+               pTelManager->__pIncomingCall->SetCallHandle(pCallStatus->CallHandle);
+               //contact number
+               String contactNumber(pCallStatus->pNumber);
+               pTelManager->__pIncomingCall->SetContactNumber(contactNumber);
+               //set emergency state
+               if(pCallStatus->CallType == TAPI_CALL_TYPE_E911)
+               {
+                       pTelManager->__pIncomingCall->SetEmergency(true);
+               }
+               else
+               {
+                       pTelManager->__pIncomingCall->SetEmergency(false);
+               }
+
+               pTelManager->__pIncomingCall->SetCalllogType(CALL_LOG_TYPE_VOICE_INCOMING);
+       }
+}
+
+void
+TelephonyManager::SaveCallInfoToLogsDb(CallInfo& endCallInfo)
+{
+       if (endCallInfo.IsConferenceCall() == false)
+       {
+               //single active call - Add call ended to call log database
+               __pCalllogMgr->AddCallogInfoToDatabase(&endCallInfo);
+       }
+       else
+       {
+               //Conference call
+               int confCallCount = endCallInfo.GetCallerListCount();
+               IListT<CallInfo>* pParticipantList = endCallInfo.GetCallerList();
+               for (int index = 0; index < confCallCount; index++)
+               {
+                       CallInfo participantInfo;
+                       if (pParticipantList->GetAt(index, participantInfo) == E_SUCCESS)
+                       {
+                               //Add call ended to call log database
+                               __pCalllogMgr->AddCallogInfoToDatabase(&participantInfo);
+                       }
+               }
+       }
+}
diff --git a/src/CallTypes.cpp b/src/CallTypes.cpp
new file mode 100644 (file)
index 0000000..71c3086
--- /dev/null
@@ -0,0 +1,348 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file       CallTypes.cpp
+ * @brief      Common constants used in Phone application
+ */
+#include "CallTypes.h"
+
+//bitmap
+const wchar_t* IDB_BTN_OPTION_BG_ICON = L"C01-3_dialer_btn_option_bg.9.png";
+const wchar_t* IDB_BTN_OPTION_PRESS_BG_ICON = L"C01-3_dialer_btn_option_press.9.png";
+const wchar_t* IDB_BTN_MORE_ICON = L"more.png";
+const wchar_t* IDB_BTN_MORE_PRESS_ICON = L"more_press.png";
+const wchar_t* IDB_POPUP_BUBBLE_ICON = L"00_popup_bubble_tail_bottom.png";
+const wchar_t* IDB_DIALER_BTN_LINE_ICON = L"C01-3_dialer_btn_1line_bg.9.png";
+const wchar_t* IDB_DIALER_BTN_PRESS_ICON = L"C01-3_dialer_btn_press.9.png";
+const wchar_t* IDB_VOICEMAIL_BTN_ICON = L"C01-3_dialer_icon_01.png";
+const wchar_t* IDB_VOICEMAIL_BTN_PRESS_ICON = L"C01-3_dialer_icon_01_press.png";
+const wchar_t* IDB_DIALER_BTN_LINE2_ICON = L"C01-3_dialer_btn_2line_bg.9.png";
+const wchar_t* IDB_DIALER_BTN_LINE3_ICON = L"C01-3_dialer_btn_3line_bg.9.png";
+const wchar_t* IDB_DIALER_BTN_LINE4_ICON = L"C01-3_dialer_btn_4line_bg.9.png";
+const wchar_t* IDB_DIALER_BTN_LINE5_ICON = L"C01-3_dialer_btn_5line_bg.9.png";
+const wchar_t* IDB_DIALER_STAR_ICON = L"C01-3_dialer_icon_star.png";
+const wchar_t* IDB_DIALER_MUTE_ICON = L"00_volume_icon_Mute.png";
+const wchar_t* IDB_DIALER_VIDEOCALL_ICON = L"C01-3_icon_voicecall.png";
+const wchar_t* IDB_DIALER_CALL_ICON = L"C01-3_icon_call.png";
+const wchar_t* IDB_DIALER_CLEAR_ICON = L"C01-3_icon_clear.png";
+const wchar_t* IDB_DIALER_CALL_BG_ICON = L"C01-3_dialer_btn_call_bg.9.png";
+const wchar_t* IDB_HIDE_KEYPAD_ICON = L"C01-1_icon_Hide.png";
+const wchar_t* IDB_HIDE_KEYPAD_PRESS_ICON = L"C01-1_icon_Hide_press_wh.png";
+const wchar_t* IDB_HIDE_KEYPAD_DIM_ICON = L"C01-1_icon_Hide_dim.png";
+const wchar_t* IDB_CLOSE_KEYPAD_ICON = L"C01-1_icon_keypad.png";
+const wchar_t* IDB_CLOSE_KEYPAD_PRESS_ICON = L"C01-1_icon_keypad_press_wh.png";
+const wchar_t* IDB_CLOSE_KEYPAD_DIM_ICON = L"C01-1_icon_keypad_dim.png";
+const wchar_t* IDB_SPEAKER_ON_ICON = L"C01-1_icon_speaker_on.png";
+const wchar_t* IDB_SPEAKER_ON_PRESS_ICON = L"C01-1_icon_speaker_on_press.png";
+const wchar_t* IDB_SPEAKER_ON_DIM_ICON = L"C01-1_icon_speaker_on_dim.png";
+const wchar_t* IDB_SPEAKER_OFF_ICON = L"C01-1_icon_speaker.png";
+const wchar_t* IDB_SPEAKER_OFF_PRESS_ICON = L"C01-1_icon_speaker_press_wh.png";
+const wchar_t* IDB_SPEAKER_OFF_DIM_ICON = L"C01-1_icon_speaker_dim.png";
+const wchar_t* IDB_MUTE_ON_ICON =  L"C01-1_icon_mute_on.png";
+const wchar_t* IDB_MUTE_ON_PRESS_ICON = L"C01-1_icon_mute_on_press.png";
+const wchar_t* IDB_MUTE_ON_DIM_ICON = L"C01-1_icon_mute_on_dim.png";
+const wchar_t* IDB_MUTE_OFF_ICON =  L"C01-1_icon_mute.png";
+const wchar_t* IDB_MUTE_OFF_PRESS_ICON = L"C01-1_icon_mute_press_wh.png";
+const wchar_t* IDB_MUTE_OFF_DIM_ICON = L"C01-1_icon_mute_dim.png";
+const wchar_t* IDB_BACKGROUND_BITMAP = L"C01-1_call_bg.png";
+const wchar_t* IDB_VOICE_CALL_ICON = L"C01-1_icon_voice call.png";
+const wchar_t* IDB_VOICE_CALL_PRESS_ICON = L"C01-1_icon_voice call_press.png";
+const wchar_t* IDB_VOICE_CALL_DIM_ICON = L"C01-1_icon_voice call_dim.png";
+const wchar_t* IDB_VIDEO_CALL_ICON = L"C01-1_icon_video call.png";
+const wchar_t* IDB_VIDEO_CALL_PRESS_ICON = L"C01-1_icon_video call_press.png";
+const wchar_t* IDB_VIDEO_CALL_DIM_ICON = L"C01-1_icon_video call_dim.png";
+const wchar_t* IDB_MESSAGE_ICON = L"C01-1_icon_message.png";
+const wchar_t* IDB_MESSAGE_PRESS_ICON = L"C01-1_icon_message_press.png";
+const wchar_t* IDB_MESSAGE_DIM_ICON = L"C01-1_icon_message_dim.png";
+const wchar_t* IDB_END_CALL_ICON = L"C01-1_icon_end_call.png";
+const wchar_t* IDB_END_CALL_PRESS_ICON = L"C01-1_icon_end_call_press_wh.png";
+const wchar_t* IDB_END_CALL_DIM_ICON = L"C01-1_icon_end_call_dim.png";
+const wchar_t* IDB_ADD_CALL_ICON = L"C01-1_icon_add.png";
+const wchar_t* IDB_ADD_CALL_PRESS_ICON = L"C01-1_icon_add_press_wh.png";
+const wchar_t* IDB_ADD_CALL_DIM_ICON = L"C01-1_icon_add_dim.png";
+const wchar_t* IDB_JOIN_CALL_ICON = L"C01-1_icon_join.png";
+const wchar_t* IDB_JOIN_CALL_PRESS_ICON = L"C01-1_icon_join_press_wh.png";
+const wchar_t* IDB_JOIN_CALL_DIM_ICON = L"C01-1_icon_join_dim.png";
+const wchar_t* IDB_CONTACT_ICON = L"C01-1_icon_contacts.png";
+const wchar_t* IDB_CONTACT_PRESS_ICON = L"C01-1_icon_contacts_press_wh.png";
+const wchar_t* IDB_CONTACT_DIM_ICON = L"C01-1_icon_contacts_dim.png";
+const wchar_t* IDB_SWAP_ICON_NORMAL = L"C01-1_icon_swap.png";
+const wchar_t* IDB_SWAP_ICON_PRESS = L"C01-1_icon_swap_press.png";
+const wchar_t* IDB_UNHOLD_NORMAL_BUTTON_ICON = L"C01-1_icon_unhold_74x74.png";
+const wchar_t* IDB_UNHOLD_PRESS_BUTTON_ICON = L"C01-1_icon_unhold_74x74_press.png";
+const wchar_t* IDB_HOLD_NORMAL_BUTTON_ICON = L"C01-1_icon_hold_74x74.png";
+const wchar_t* IDB_HOLD_PRESS_BUTTON_ICON = L"C01-1_icon_hold_74x74_press.png";
+const wchar_t* IDB_POPUP_ARROW_ICON = L"C01-1_popup_arrow.png";
+const wchar_t* IDB_POPUP_BG_ICON = L"C01-1_popup_bg.png";
+const wchar_t* IDB_MORE_MANAGE_CONFERENCE_ICON = L"C01-1_icon_more_Manage conference call.png";
+const wchar_t* IDB_CONFERENCE_BG_ICON = L"C01-1_call_group_caller ID_720x720.png";
+const wchar_t* IDB_CONFERENCE_BIG_BG_ICON = L"C01-1_call_group_caller ID_720x720.png";
+const wchar_t* IDB_ACTIVE_CALL_DEFAULT_ICON = L"C01-1_call_default_caller ID_720x720.png";
+const wchar_t* IDB_MULTIPLE_CALL_DEFAULT_ICON = L"C01-1_call_default_caller ID_720x720.png";
+const wchar_t* IDB_CALL_THUMBNAIL_BACKGROUND = L"C01-1_call_thumbnail_bg.png";
+const wchar_t* IDB_CALL_THUMBNAIL_SHADOW = L"C01-1_call_ID_thumbnail_shadow_388x388.png";
+//Bitmaps for DTMF Keypad
+const wchar_t* IDB_KEYPAD_BG = L"C01-1_keypad_btn_normal.png";
+const wchar_t* IDB_KEYPAD_BUTTON_PRESS = L"C01-1_keypad_btn_press.png";
+const wchar_t* IDB_KEYPAD_NUM1_ICON = L"C01-1_keypad_btn_icon.png";
+const wchar_t* IDB_CALLOG_LIST_BG = L"00_index list_bg.png";
+const wchar_t* IDB_LOG_RECEIVEDCALL_ICON = L"C01-4_icon_dialed.png";
+const wchar_t* IDB_LOG_DIALEDCALL_ICON = L"C01-4_icon_received.png";
+const wchar_t* IDB_LOG_MISSEDCALL_ICON = L"C01-4_icon_missed-call.png";
+const wchar_t* IDB_LOG_BLOCKEDCALL_ICON = L"C01-4_icon_Blocked(Auto-rejected).png";
+const wchar_t* IDB_LOG_DETAIL_CALL_ICON = L"C01-4_btn_icon_call.png";
+const wchar_t* IDB_LOG_DETAIL_MSG_ICON = L"C01-1_icon_Reject_with_Message.png";
+const wchar_t* IDB_LOG_NO_CONTENT = L"00_Nocontents_text.png";
+const wchar_t* IDB_VIEW_CONTACT_ICON = L"C01-1_contact_btn_icon.png";
+const wchar_t* IDB_VIEW_CONTACT_PRESS_ICON = L"C01-1_contact_btn_icon_press.png";
+//const wchar_t* IDB_VIEW_CONTACT_BG_ICON = L"C01-1_contact_btn.png";
+//const wchar_t* IDB_VIEW_CONTACT_BG_PRESS_ICON = L"C01-1_contact_btn_press.png";
+const wchar_t* IDB_VIEW_CONTACT_BG_ICON = L"C01-1_keypad_btn_normal.png";
+const wchar_t* IDB_VIEW_CONTACT_BG_PRESS_ICON = L"C01-1_keypad_btn_normal.png";
+
+//String messages
+const wchar_t* IDS_DIALER_MOBILE_STR = L"IDS_DIALER_MOBILE_STR";
+const wchar_t* IDS_DIALER_SPEEDDIAL_POPUP_MSG = L"IDS_DIALER_SPEEDDIAL_POPUP_MSG";
+const wchar_t* IDS_SPEEDDIAL_POP_YES_BTN_STRING = L"IDS_SPEEDDIAL_POP_YES_BTN_STRING";
+const wchar_t* IDS_SPEEDDIAL_POP_NO_BTN_STRING = L"IDS_SPEEDDIAL_POP_NO_BTN_STRING";
+const wchar_t* IDS_DIALER_MENU_ITEM_SEND_MSG = L"IDS_DIALER_MENU_ITEM_SEND_MSG";
+const wchar_t* IDS_DIALER_MENU_ITEM_ADD_CONTACT = L"IDS_DIALER_MENU_ITEM_ADD_CONTACT";
+const wchar_t* IDS_DIALER_MENU_ITEM_SPEED_DIAL = L"IDS_DIALER_MENU_ITEM_SPEED_DIAL";
+const wchar_t* IDS_DIALER_MENU_ITEM_ADD_PAUSE = L"IDS_DIALER_MENU_ITEM_ADD_PAUSE";
+const wchar_t* IDS_DIALER_MENU_ITEM_ADD_WAIT = L"IDS_DIALER_MENU_ITEM_ADD_WAIT";
+const wchar_t* IDS_DIALER_MENU_ITEM_EXIT = L"IDS_DIALER_MENU_ITEM_EXIT";
+const wchar_t* IDS_SPEED_DIAL_SEARCH_KEY = L"SPEED_DIAL";
+const wchar_t* IDS_KEYPAD_BTN_NAME = L"IDS_KEYPAD_BTN_NAME";
+const wchar_t* IDS_SPEAKER_BTN_NAME = L"IDS_SPEAKER_BTN_NAME";
+const wchar_t* IDS_MUTE_BTN_NAME = L"IDS_MUTE_BTN_NAME";
+const wchar_t* IDS_VOICE_CALL_BTN_NAME = L"IDS_VOICE_CALL_BTN_NAME";
+const wchar_t* IDS_VIDEO_CALL_BTN_NAME = L"IDS_VIDEO_CALL_BTN_NAME";
+const wchar_t* IDS_MSG_BTN_NAME = L"IDS_MSG_BTN_NAME";
+const wchar_t* IDS_ENDCALL_BTN_NAME = L"IDS_ENDCALL_BTN_NAME";
+const wchar_t* IDS_ADDCALL_BTN_NAME = L"IDS_ADDCALL_BTN_NAME";
+const wchar_t* IDS_JOINCALL_BTN_NAME = L"IDS_JOINCALL_BTN_NAME";
+const wchar_t* IDS_CONTACT_BTN_NAME = L"IDS_CONTACT_BTN_NAME";
+const wchar_t* IDS_HOLD_BTN_NAME = L"IDS_HOLD_BTN_NAME";
+const wchar_t* IDS_UNHOLD_BTN_NAME = L"IDS_UNHOLD_BTN_NAME";
+const wchar_t* IDS_PEOPLE_STR = L"IDS_PEOPLE_STR";
+const wchar_t* IDS_MGR_CONF_CALL_LIST_STR = L"IDS_MGR_CONF_CALL_LIST_STR";
+const wchar_t* IDS_LOG_CONTEXT_CALL = L"IDS_LOG_CONTEXT_CALL";
+const wchar_t* IDS_LOG_CONTEXT_MESSAGE = L"IDS_LOG_CONTEXT_MESSAGE";
+const wchar_t* IDS_LOG_CONTEXT_VIDEOCALL = L"IDS_LOG_CONTEXT_VIDEOCALL";
+const wchar_t* IDS_LOG_CONTEXT_DELETE = L"IDS_LOG_CONTEXT_DELETE";
+const wchar_t* IDS_AM_TIME = L"IDS_AM_TIME" ;
+const wchar_t* IDS_PM_TIME = L"IDS_PM_TIME";
+const wchar_t* IDS_CALLLOG_NO_NUMBER = L"IDS_CALLLOG_NO_NUMBER";
+const wchar_t* IDS_CALLLOG_NO_NAME = L"IDS_CALLLOG_NO_NAME";
+const wchar_t* IDS_CALLLOG_RECEIVED = L"IDS_CALLLOG_RECEIVED";
+const wchar_t* IDS_CALLLOG_MISSED =  L"IDS_CALLLOG_MISSED";
+const wchar_t* IDS_CALLLOG_OUTGOING = L"IDS_CALLLOG_OUTGOING";
+const wchar_t* IDS_CALLLOG_RECEIVED_MSG = L"IDS_CALLLOG_RECEIVED_MSG";
+const wchar_t* IDS_CALLLOG_SENT_MSG = L"IDS_CALLLOG_SENT_MSG";
+const wchar_t* IDS_CALLLOG_REJECTED = L"IDS_CALLLOG_REJECTED";
+const wchar_t* IDS_CALLLOG_DELETE_FOOTER = L"IDS_CALLLOG_DELETE_FOOTER";
+const wchar_t* IDS_CALLLOG_CANCEL_FOOTER = L"IDS_CALLLOG_CANCEL_FOOTER";
+const wchar_t* IDS_EMERGENCY_CALL = L"IDS_EMERGENCY_CALL";
+const wchar_t* IDS_SELECT_CALL_LOG = L"IDS_SELECT_CALL_LOG";
+const wchar_t* IDS_SELECTED_ITEMS_STRING = L"IDS_SELECTED_ITEMS_STRING";
+const wchar_t* IDS_SELECTED_ITEM_STRING = L"IDS_SELECTED_ITEM_STRING";
+const wchar_t* IDS_SELECT_NUMBER = L"IDS_SELECT_NUMBER";
+const wchar_t* IDS_NUMBER_SELECTED = L"IDS_NUMBER_SELECTED";
+const wchar_t* IDS_NUMBERS_SELECTED = L"IDS_NUMBERS_SELECTED";
+const wchar_t* IDS_SELECT_MESSAGE = L"IDS_SELECT_MESSAGE";
+const wchar_t* IDS_MESSAGE_SELECTED = L"IDS_MESSAGE_SELECTED";
+const wchar_t* IDS_MESSAGES_SELECTED = L"IDS_MESSAGES_SELECTED";
+const wchar_t* IDS_NO_LOGS = L"IDS_NO_LOGS";
+const wchar_t* IDS_FLIGHT_MODE_ON = L"IDS_FLIGHT_MODE_ON";
+const wchar_t* IDS_ADD_TO_CONTACTS = L"IDS_ADD_TO_CONTACTS";
+const wchar_t* IDS_TIMER_ON_HOLD = L"IDS_TIMER_ON_HOLD";
+const wchar_t* IDS_CANCEL = L"IDS_CANCEL";
+const wchar_t* IDS_LOGS_TODAY = L"IDS_LOGS_TODAY";
+const wchar_t* IDS_LOGS_YESTERDAY = L"IDS_LOGS_YESTERDAY";
+const wchar_t* IDS_REJECT_MESSAGE_CREATE = L"IDS_REJECT_MESSAGE_CREATE";
+const wchar_t* IDS_VIEW_CONTACT = L"IDS_VIEW_CONTACT";
+const wchar_t* IDS_INVALID_NUMBER = L"IDS_INVALID_NUMBER";
+const wchar_t* IDS_NUMBER_UNKNOWN = L"IDS_NUMBER_UNKNOWN";
+//Panel
+const wchar_t* PANEL_DIALER = L"PanelDialer";
+const wchar_t* PANEL_LOGS = L"PanelLogs";
+
+//Corresponding Call form name
+const wchar_t* IDL_FORM_OUTCALL = L"OutgoingCallForm";
+const wchar_t* IDL_FORM_OUT_EMERGENCYCALL = L"OutgoingEmergencyCallForm";
+const wchar_t* IDL_FORM_INCOMINGCALL = L"IncomingCallForm";
+const wchar_t* IDL_FORM_ACTIVECALL = L"ActiveCallForm";
+const wchar_t* IDL_FORM_ACTIVE_EMERGENCYCALL = L"ActiveEmergencyCallForm";
+const wchar_t* IDL_FORM_CONFCALL = L"ActiveConfCallForm";
+const wchar_t* IDL_FORM_CONFCALLLIST = L"ConfCallListForm ";
+const wchar_t* IDL_FORM_ENDCALL = L"EndCallForm";
+const wchar_t* IDL_FORM_MULTIPLEACTIVECALL = L"MultipleActiveCallForm";
+//Corresponding Settings form name
+const wchar_t* IDL_FORM_SETTINGS_PREFIX = L"SettingsForm";
+const wchar_t* IDL_FORM_MAIN_SETTING_MENU = L"SettingsFormMainMenu";
+const wchar_t* IDL_FORM_CALL_REJECTLIST_MENU = L"SettingsFormCallRejectList";
+const wchar_t* IDL_FORM_CALL_REJECTMSGS_MENU = L"SettingsFormCallRejectMsgs";
+const wchar_t* IDL_FORM_SPEED_DIAL = L"SettingsFormSpeedDial";
+const wchar_t* IDL_FORM_MORE_OPTIONS = L"SettingsFormMoreOptions";
+const wchar_t* IDL_FORM_CALL_STATUSTONES = L"SettingsFormCallStatusTones";
+const wchar_t* IDL_FORM_CALLTYPE_FORWARD = L"SettingsFormCallTypeForward";
+const wchar_t* IDL_FORM_CALL_FORWARD_OPTIONS = L"SettingsFormCallForwardMenu";
+const wchar_t* IDL_FORM_CALLTYPE_BARRING = L"SettingsFormCallTypeBarring";
+const wchar_t* IDL_FORM_CALL_BARRING_OPTIONS = L"SettingsFormCallBarringMenu";
+const wchar_t* IDL_FORM_CALL_WAITING_OPTIONS = L"SettingsFormCallWaitingMenu";
+const wchar_t* IDL_FORM_ADD_REJECT_NUMBER = L"SettingsFormAddRejectNumber";
+const wchar_t* IDL_FORM_AUTO_AREA_CODE = L"SettingsFormAutoAreaCode";
+const wchar_t* IDL_FORM_ADD_REJECT_MSG = L"SettingsFormAddRejectMsg";
+const wchar_t* IDL_FORM_EDIT_REJECT_MSG = L"SettingsFormEditRejectMsg";
+const wchar_t* IDL_FORM_FORWARD_TO_NUMBER = L"SettingsFormForwardToNumber";
+const wchar_t* IDL_FORM_NOREPLY_FORWARD_TO_NUMBER = L"SettingsFormNoReplyForwardToNumber";
+const wchar_t* IDL_FORM_SCENE_SET_BARRING_PWD = L"SettingsFormSetBarringPwd";
+const wchar_t* IDL_FORM_DEL_NUMBER = L"SettingsFormDeleteNumbers";
+const wchar_t* IDL_FORM_DEL_MESSAGE = L"SettingsFormDeleteMessages";
+//Dialer & Call Log Form names
+const wchar_t* IDL_FORM_DIAL_APP = L"DialAppForm";
+const wchar_t* IDL_FORM_CALL_LOG_DETAIL = L"CallLogDetailForm";
+const wchar_t* IDL_CALL_PANEL = L"IDL_KEYS_PANEL";
+const wchar_t* IDL_END_CALL_PANEL = L"IDL_ENDCALLKEYS_PANEL";
+const wchar_t* IDL_OUTCALL_FORM = L"IDL_OUTCALL_FORM";
+const wchar_t* IDL_OUT_EMERGENCYCALL_FORM = L"IDL_OUT_EMERGENCYCALL_FORM";
+const wchar_t* IDL_CALL_FORM = L"IDL_CALL_FORM";
+const wchar_t* IDL_EMERGENCY_CALL_FORM = L"IDL_EMERGENCY_CALL_FORM";
+const wchar_t* IDL_MULTIPLE_CALL_FORM = L"IDL_MULTIPLE_CALL_FORM";
+const wchar_t* IDL_CONFCALL_FORM = L"IDL_CONFCALL_FORM";
+const wchar_t* IDL_DTMF_PANEL = L"IDL_DTMF_KEYPAD_PANEL";
+const wchar_t* IDL_DTMF_KEYS_PANEL = L"IDL_DTMF_KEYS_PANEL";
+const wchar_t* IDL_DIALER_KEYPAD_PANEL = L"IDL_DIALER_KEYPAD_PANEL";
+const wchar_t* IDL_FORM_EMERGENCY_DIAL = L"IDL_FORM_EMERGENCY_DIAL";
+
+//Constants - Call Scene name
+const wchar_t* IDSCN_SCENE_OUTCALL = L"OutgoingCallScene";
+const wchar_t* IDSCN_SCENE_OUT_EMERGENCYCALL = L"OutgoingEmergencyCallScene";
+const wchar_t* IDSCN_SCENE_INCOMINGCALL = L"IncomingCallScene";
+const wchar_t* IDSCN_SCENE_ACTIVECALL = L"ActiveCallScene";
+const wchar_t* IDSCN_SCENE_ACTIVE_EMERGENCYCALL = L"ActiveEmergencyCallScene";
+const wchar_t* IDSCN_SCENE_CONFCALL = L"ActiveConfCallScene";
+const wchar_t* IDSCN_SCENE_CONFCALLLIST = L"ConfCallListScene";
+const wchar_t* IDSCN_SCENE_ENDCALL = L"EndCallScene";
+const wchar_t* IDSCN_SCENE_MULTIPLEACTIVECALL = L"MultipleActiveCallScene";
+//Constants - Settings Scene name
+const wchar_t* IDSCN_SCENE_MAIN_SETTING_MENU = L"CallMainSettingScene";
+const wchar_t* IDSCN_SCENE_CALL_REJECTLIST_MENU = L"CallRejectListScene";
+const wchar_t* IDSCN_SCENE_CALL_REJECTMSGS_MENU = L"CallRejectMsgsScene";
+const wchar_t* IDSCN_SCENE_SPEED_DIAL = L"SpeedDialScene";
+const wchar_t* IDSCN_SCENE_MORE_OPTIONS = L"MoreOptionsScene";
+const wchar_t* IDSCN_SCENE_CALL_STATUSTONES = L"CallStatusTonesScene";
+const wchar_t* IDSCN_SCENE_CALLTYPE_FORWARD = L"CallTypeForwardScene";
+const wchar_t* IDSCN_SCENE_CALL_FORWARD_OPTIONS = L"CallForwardMenuScene";
+const wchar_t* IDSCN_SCENE_CALLTYPE_BARRING = L"CallTypeBarringScene";
+const wchar_t* IDSCN_SCENE_CALL_BARRING_OPTIONS = L"CallBarringMenuScene";
+const wchar_t* IDSCN_SCENE_CALL_WAITING_OPTIONS = L"CallWaitingMenuScene";
+const wchar_t* IDSCN_SCENE_ADD_REJECT_NUMBER = L"AddRejectNumberScene";
+const wchar_t* IDSCN_SCENE_AUTO_AREA_CODE = L"AutoAreaCodeScene";
+const wchar_t* IDSCN_SCENE_ADD_REJECT_MSG = L"AddRejectMsgScene";
+const wchar_t* IDSCN_SCENE_EDIT_REJECT_MSG = L"EditRejectMsgScene";
+const wchar_t* IDSCN_SCENE_FORWARD_TO_NUMBER = L"ForwardToNumberScene";
+const wchar_t* IDSCN_SCENE_NOREPLY_FORWARD_TO_NUMBER = L"NoReplyForwardToNumberScene";
+const wchar_t* IDSCN_SCENE_SET_BARRING_PWD = L"SetBarringPwdScene";
+const wchar_t* IDSCN_SCENE_DEL_NUMBER = L"DeleteNumbersScene";
+const wchar_t* IDSCN_SCENE_DEL_MESSAGE = L"DeleteMessagesScene";
+//Dialer & Call Log Scene names
+const wchar_t* IDSCN_DIALER = L"SceneDialer";
+const wchar_t* IDSCN_CALL_LOG = L"SceneCallLog";
+const wchar_t* IDSCN_CALL_LOG_DETAILS = L"SceneCallLogDetails";
+const wchar_t* IDSCN_EMERGENCY_DIAL    = L"SceneEmergencyDial";
+
+const wchar_t* TYPE_VIDEO = L"type:video";
+const wchar_t* TYPE_VOICE = L"type:voice";
+const wchar_t* TYPE_SMS = L"type:SMS";
+const wchar_t* TEL = L"tel:";
+const wchar_t* TO = L"to:";
+
+const wchar_t* OPERATION_ID_PICK = L"http://tizen.org/appcontrol/operation/pick";
+const wchar_t* OPERATION_ID_VIEW = L"http://tizen.org/appcontrol/operation/view";
+const wchar_t* OPERATION_ID_ADD = L"http://tizen.org/appcontrol/operation/add";
+const wchar_t* OPERATION_ID_EDIT = L"http://tizen.org/appcontrol/operation/edit";
+const wchar_t* OPERATION_ID_CONFIGURE = L"http://tizen.org/appcontrol/operation/configure";
+const wchar_t* OPERATION_ID_CAPTURE = L"http://tizen.org/appcontrol/operation/capture";
+const wchar_t* OPERATION_ID_CALL = L"http://tizen.org/appcontrol/operation/call";
+const wchar_t* OPERATION_ID_COMPOSE = L"http://tizen.org/appcontrol/operation/compose";
+const wchar_t* OPERATION_ID_DIAL = L"http://tizen.org/appcontrol/operation/dial";
+
+const wchar_t* PROVIDER_ID_CAMERA = L"http://tizen.org/appcontrol/provider/camera";
+const wchar_t* PROVIDER_ID_GALLERY = L"http://tizen.org/appcontrol/provider/gallery";
+//const wchar_t* PROVIDER_ID_CALL = L"http://tizen.org/appcontrol/provider/call";
+const wchar_t* PROVIDER_ID_MESSAGE = L"http://tizen.org/appcontrol/provider/message";
+const wchar_t* PROVIDER_ID_EMAIL = L"http://tizen.org/appcontrol/provider/email";
+const wchar_t* PROVIDER_ID_MEDIA = L"http://tizen.org/appcontrol/provider/media";
+const wchar_t* PROVIDER_ID_CONTACTS = L"f9uev8hsyo.Contacts";
+const wchar_t* PROVIDER_ID_CALL = L"nI2PLNdTwi.Call";
+const wchar_t* PROVIDER_ID_PHONE = L"tizen.phone";
+
+const wchar_t* RETURN_TYPE_PHONE = L"phone";
+const wchar_t* RETURN_TYPE_EMAIL = L"Email";
+const wchar_t* RETURN_TYPE_CONTACT_ID = L"contactId";
+
+//Constants used in AppControl requests
+const wchar_t* DELIMITER = L":";
+const wchar_t* LAUNCHTYPE = L"launch-type";
+const wchar_t* PARAM_ORIGIN_MT = L"MT";
+const wchar_t* CALL_HANDLE = L"handle";
+const wchar_t* CONTACT_NUMBER = L"number";
+const wchar_t* PARAM_CALL_VALUE_VOICE = L"voice";
+const wchar_t* PARAM_CALL_TYPE = L"type";
+const wchar_t* PARAM_PHONE_NUMBER = L"tel";
+const wchar_t* INPUT_TYPE_PHONE = L"phone";
+const wchar_t* MESSAGE_TYPE = L"type";
+const wchar_t* MESSAGE_SMS_TYPE = L"SMS";
+const wchar_t* MESSAGE_TEXT = L"text";
+const wchar_t* MESSAGE_TO = L"to";
+//Contacts app control parameters
+const wchar_t* CONTACTS_VIEW_TYPE = L"viewType";
+const wchar_t* CONTACTS_VIEW_TYPE_CONTACT = L"contact";
+const wchar_t* CONTACTS_ID_KEY = L"contactId";
+
+
+const wchar_t* SELECTION_MODE = L"selectionMode";
+const wchar_t* RETURN_TYPE = L"returnType";
+const wchar_t* SELECTION_MODE_SINGLE = L"single";
+const wchar_t* RETURN_KEY_VALUE = L"value";
+
+//Settings Strings
+const wchar_t* SETTINGS_FLIGHT_MODE_STR = L"http://tizen.org/setting/network.flight_mode";
+//Dimensions for Small photo of caller/callee.
+const int W_SMALL_PHOTO = 366;
+const int H_SMALL_PHOTO = 366;
+const int W_CALL_THUMBNAIL = 720;
+const int H_CALL_THUMBNAIL = 720;
+const int W_CALL_THUMBNAIL_SHADOW = 388;
+const int H_CALL_THUMBNAIL_SHADOW = 388;
+const int W_CONFERENCE_PHOTO = 720;
+const int H_CONFERENCE_PHOTO = 370;
+//Maximum number of calls
+const int IDI_MAX_ACTIVE_CALLS = 2;
+const int IDI_MAX_CONF_CALL_PARTICIPANTS = 5;
+//Constants used for custom list item in message panel in Incoming call screen
+const int IDA_FORMAT_SENDTEXT = 500;
+//Constants
+const wchar_t* IDI_KEY2_TXT = L"ABC";
+const wchar_t* IDI_KEY3_TXT = L"DEF";
+const wchar_t* IDI_KEY4_TXT = L"GHI";
+const wchar_t* IDI_KEY5_TXT = L"JKL";
+const wchar_t* IDI_KEY6_TXT = L"MNO";
+const wchar_t* IDI_KEY7_TXT = L"PQRS";
+const wchar_t* IDI_KEY8_TXT = L"TUV";
+const wchar_t* IDI_KEY9_TXT = L"WXYZ";
diff --git a/src/CalllogManager.cpp b/src/CalllogManager.cpp
new file mode 100644 (file)
index 0000000..6f1f749
--- /dev/null
@@ -0,0 +1,200 @@
+//
+// Copyright (c) 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://floralicense.org/license/
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an AS IS BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+
+/**
+ * @file       CalllogManager.cpp
+ * @brief      This class provides call log APIs
+ */
+#include "CalllogManager.h"
+#include <FLocales.h>
+
+using namespace Tizen::Base;
+using namespace Tizen::Base::Collection;
+using namespace Tizen::Base::Utility;
+using namespace Tizen::System;
+using namespace Tizen::Locales;
+
+CallLogManager*        CallLogManager::__pCallogManager = null;
+
+CallLogManager::CallLogManager(void)
+{
+
+}
+
+CallLogManager::~CallLogManager(void)
+{
+       __pCallogManager = null;
+}
+
+CallLogManager*
+CallLogManager::GetInstance(void)
+{
+       if(__pCallogManager == null)
+       {
+               CreateInstance();
+       }
+       return __pCallogManager;
+}
+
+void
+CallLogManager::CreateInstance(void)
+{
+       __pCallogManager = new CallLogManager();
+       result r = __pCallogManager->Construct();
+       if(IsFailed(r))
+       {
+               delete __pCallogManager;
+               __pCallogManager = null;
+               return;
+       }
+       std::atexit(DestroyInstance);
+}
+
+result
+CallLogManager::Construct(void)
+{
+       int ret = contacts_connect2();
+       if(ret != 0)
+       {
+               return E_FAILURE;
+       }
+       return E_SUCCESS;
+
+}
+
+void
+CallLogManager::DestroyInstance(void)
+{
+       contacts_disconnect2();
+       delete __pCallogManager;
+}
+
+result
+CallLogManager::AddCallogInfoToDatabase(CallInfo* calllogInfo)
+{
+       AppLog(" AddVoiceCallInfo Entry");
+       int duration = 0;
+       long long startTime;
+
+       if(calllogInfo != null)
+       {
+               CallLogType callLogType = calllogInfo->GetCalllogType();
+               contacts_phone_log_type_e logType = CONTACTS_PLOG_TYPE_NONE;
+               switch (callLogType)
+               {
+               case CALL_LOG_TYPE_VOICE_INCOMING:
+                       logType = CONTACTS_PLOG_TYPE_VOICE_INCOMMING;
+                       break;
+               case CALL_LOG_TYPE_VOICE_OUTGOING:
+                       logType = CONTACTS_PLOG_TYPE_VOICE_OUTGOING;
+                       break;
+               case CALL_LOG_TYPE_VOICE_MISSED:
+                       logType = CONTACTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN;
+                       break;
+               case CALL_LOG_TYPE_VOICE_REJECTED:
+                       logType = CONTACTS_PLOG_TYPE_VOICE_REJECT;
+                       break;
+               case CALL_LOG_TYPE_VOICE_BLOCKED:
+                       logType = CONTACTS_PLOG_TYPE_VOICE_BLOCKED;
+                       break;
+               default:
+                       break;
+               }
+               startTime = calllogInfo->GetCallNotificationTime();
+               if ((logType == CONTACTS_PLOG_TYPE_VOICE_INCOMMING_UNSEEN)
+                       || (logType == CONTACTS_PLOG_TYPE_VOICE_REJECT)
+                       || (logType == CONTACTS_PLOG_TYPE_VOICE_BLOCKED))
+               {
+                       duration = 0;
+               }
+               else
+               {
+                       //start time is in miliseconds . so convert to seconds and set it to time_t format.
+                       long long connectTime = calllogInfo->GetCallConnectTime();
+                       if(connectTime == 0 || connectTime < 0)
+                       {
+                               connectTime = time(null);
+                       }
+                       else
+                       {
+                               connectTime = calllogInfo->GetCallConnectTime()/ 1000;
+                       }
+                       duration = (int)GetDuration(connectTime);
+               }
+
+               String PhNumber(L"");
+               ByteBuffer* pByteBuffer = null;
+
+               if(calllogInfo->GetContactNumber().IsEmpty() == false)
+               {
+                       PhNumber.Append(calllogInfo->GetContactNumber());
+                       pByteBuffer = StringUtil::StringToUtf8N(PhNumber);
+               }
+
+
+               contacts_record_h hContactLog=0;
+               int ret = contacts_record_create(_contacts_phone_log._uri,&hContactLog);
+               if (ret != 0)
+               {
+                       return E_FAILURE;
+               }
+               int id;
+
+
+               if (contacts_record_set_int(hContactLog,_contacts_phone_log.log_type,logType) != CONTACTS_ERROR_NONE)
+               {
+                       AppLog(" calllog_set_type is failed");
+               }
+               else if (contacts_record_set_int(hContactLog,_contacts_phone_log.log_time,startTime/1000) != CONTACTS_ERROR_NONE)
+               {
+                       AppLog(" calllog_set_time is failed");
+               }
+               else if (contacts_record_set_int(hContactLog,_contacts_phone_log.extra_data1,duration) != CONTACTS_ERROR_NONE)
+               {
+                       AppLog(" calllog_set_duration is failed");
+               }
+               else if ((pByteBuffer != null) && (contacts_record_set_str(hContactLog,_contacts_phone_log.address,(const char*) pByteBuffer->GetPointer()) != CONTACTS_ERROR_NONE))
+               {
+                       AppLog(" calllog_set_number is failed");
+               }
+               else if (contacts_db_insert_record(hContactLog,&id) != CONTACTS_ERROR_NONE)
+               {
+                       AppLog(" calllog_insert_to_db is failed");
+               }
+               else
+               {
+                       AppLog(" Call log is added successfully");
+               }
+
+       }
+       AppLog(" AddVoiceCallInfo Exit");
+       return E_SUCCESS;
+}
+
+unsigned long
+CallLogManager::GetDuration(long long start_time)
+{
+       time_t curr_time;
+       unsigned long call_duration_in_sec = 50;
+       curr_time = time(0);
+       /*if(start_time != 0)
+       {
+               start_time /= 1000;
+       }*/
+       call_duration_in_sec = curr_time - start_time;
+       return call_duration_in_sec;
+}
+