2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 // Licensed under the Flora License, Version 1.1 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://floralicense.org/license/
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an AS IS BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
18 * @file PhnActiveCallForm.cpp
19 * @brief Active Call Form class
26 #include "CallActiveCallForm.h"
27 #include "CallButtonsPanel.h"
29 #include "CallAppUtility.h"
30 #include "CallDtmfKeypadPanel.h"
31 #include "CallPresentationModel.h"
32 #include "CallSceneRegister.h"
33 #include "CallTypes.h"
36 using namespace Tizen::App;
37 using namespace Tizen::Base;
38 using namespace Tizen::Base::Collection;
39 using namespace Tizen::Base::Utility;
40 using namespace Tizen::Graphics;
41 using namespace Tizen::Media;
42 using namespace Tizen::Social;
43 using namespace Tizen::System;
44 using namespace Tizen::Ui;
45 using namespace Tizen::Ui::Controls;
46 using namespace Tizen::Ui::Scenes;
47 using namespace Tizen::Shell;
50 const int IDI_MAX_SECONDS = 60;
51 const int IDI_MAX_MINS = 60;
52 const int W_HOLD_BITMAP = 78;
53 const int H_HOLD_BITMAP = 78;
54 //for Options menu list
55 const int IDI_POPUP_TEXT_SIZE = 33;
56 const unsigned int COLOR_POPUP_TEXT = Color32<255, 255, 255, 255>::Value;
57 const int IDI_MOREOPTIONS_LIST_ITEMS = 1;
58 const int W_OPTION_ANCHOR = 72;
59 const int H_OPTION_ANCHOR = 22;
60 const int W_MGR_CONFCALL_BITMAP = 64;
61 const int H_MGR_CONFCALL_BITMAP = 64;
62 const int X_POPUP_ANCHOR = 632;
63 const int Y_POPUP_ANCHOR = 140;
64 const int W_POPUP_ANCHOR = 72;
65 const int H_POPUP_ANCHOR = 22;
66 const int IDI_OPTIONMENU_ITEM_SPACING = 16;
67 const Point IDI_OPTIONMENU_POS(238, 162);
68 const Dimension IDI_OPTIONMENU_DIMEN(466, 99);
69 const int X_PHOTO_LBL = 166;
70 const int Y_PHOTO_LBL = 232;
71 const int W_PHOTO_LBL = 388;
72 const int H_PHOTO_LBL = 388;
73 const int W_PHOTO_LABEL = 720;
74 const int H_PHOTO_LABEL = 720;
75 const int W_RIGHT_MORE_ICON_MARGIN = 24;
76 const int W_MORE_LABEL = 466;
77 const int H_MORE_LABEL = 162;
78 const int W_MORE_ICON = 70;
80 static const wchar_t* IDC_CONF_CALL_MORE_BUTTON = L"IDC_CONF_CALL_MORE_BUTTON";
81 static const wchar_t* IDC_HOLD_BUTTON = L"IDC_HOLD_BUTTON";
82 static const wchar_t* IDC_SWAP_BUTTON = L"IDC_SWAP_BUTTON";
83 static const wchar_t* IDC_HOLD_LABEL = L"IDC_HOLD_LABEL";
84 static const wchar_t* IDC_TEXTBOX = L"IDC_NUM_EDITFIELD";
85 static const wchar_t* IDC_CALLER1_LABEL = L"IDC_CALLER1_LABEL";
86 static const wchar_t* IDC_BACKGROUND_LABEL = L"IDC_BACKGROUND_LABEL";
87 static const wchar_t* IDC_CALLER1_TIME_LABEL = L"IDC_CALLER1_TIME_LABEL";
88 static const wchar_t* IDC_NUMBER1_LABEL = L"IDC_NUMBER1_LABEL";
89 static const wchar_t* IDC_VOICE_CALL_ICON_LABEL = L"IDC_VOICE_CALL_ICON_LABEL";
90 static const wchar_t* IDC_CALLER2_LABEL = L"IDC_CALLER2_LABEL";
91 static const wchar_t* IDC_NUMBER2_LABEL = L"IDC_NUMBER2_LABEL";
92 static const wchar_t* IDC_CALLER2_TIME_LABEL = L"IDC_CALLER2_TIME_LABEL";
93 static const wchar_t* IDC_SWAP_LABEL = L"IDC_SWAP_LABEL";
94 static const wchar_t* IDC_BACKGROUND_LABEL2 = L"IDC_BACKGROUND_LABEL2";
95 static const wchar_t* IDC_PARTICIPANTS_LABEL = L"IDC_PARTICIPANTS_LABEL";
96 static const wchar_t* IDC_CALLER1_BIGPHOTO_LABEL = L"IDC_CALLER1_BIGPHOTO_LABEL";
97 static const wchar_t* IDC_CALLER2_PHOTO_LABEL = L"IDC_CALLER2_PHOTO_LABEL";
98 static const wchar_t* IDC_CALLER1_PHOTO_LABEL = L"IDC_CALLER1_PHOTO_LABEL";
99 static const wchar_t* IDC_KEY_BG_LABEL = L"IDC_KEY_BG_LABEL";
101 ActiveCallForm::ActiveCallForm(FormType formType)
104 __pActiveCallTimer = null;
105 __pCallButtonsPanel = null;
106 __pDTMFKeypad = null;
107 __pMoreOptionsList = null;
108 __pMoreOptionsListAnchor = null;
109 __pSmallPhotoLabel = null;
110 __pActiveCallInfo = null;
111 __pHeldCallInfo = null;
112 __isSwapInProgress = false;
113 __pAddressbook == null;
116 ActiveCallForm::~ActiveCallForm(void)
118 if (__pActiveCallTimer != null)
120 __pActiveCallTimer->Cancel();
121 delete __pActiveCallTimer;
123 if (__pMoreOptionsList != null)
125 __pMoreOptionsList = null;
127 if (__pMoreOptionsListAnchor != null)
129 __pMoreOptionsListAnchor = null;
131 if (__pSmallPhotoLabel != null)
133 __pSmallPhotoLabel = null;
135 if (__pActiveCallInfo != null)
137 delete __pActiveCallInfo;
139 if (__pHeldCallInfo != null)
141 delete __pHeldCallInfo;
143 if(__pDTMFKeypad != null)
145 __pDTMFKeypad = null;
150 ActiveCallForm::Initialize(void)
154 case FORMTYPE_OUTGOINGCALL:
155 Construct(IDL_OUTCALL_FORM);
158 case FORMTYPE_EMERGENCYOUTGOINGCALL:
159 Construct(IDL_OUT_EMERGENCYCALL_FORM);
162 case FORMTYPE_ACTIVECALL:
163 Construct(IDL_CALL_FORM);
166 case FORMTYPE_EMERGENCYACTIVECALL:
167 Construct(IDL_EMERGENCY_CALL_FORM);
170 case FORMTYPE_MULTIPLECALLS:
171 Construct(IDL_MULTIPLE_CALL_FORM);
174 case FORMTYPE_ACTIVECONFCALL:
175 Construct(IDL_CONFCALL_FORM);
184 ActiveCallForm::OnInitializing(void)
186 result r = E_SUCCESS;
188 //Hold Button - Shown on single active/conf call scene
189 InitializeHoldButton();
190 //Swap button for multiple call screen
191 InitializeSwapButton();
192 //Initialize manage conf. call list form
193 InitializeManageConfCallButton();
195 __pCallPresentor = CallPresentationModel::GetInstance();
200 ActiveCallForm::ShowDTMFKeypad(void)
202 if(__pDTMFKeypad == null)
204 //update rect according to client screen area
205 Rectangle rect(0, 0, 0, 0);
206 if (GetOrientationStatus() == ORIENTATION_STATUS_PORTRAIT || GetOrientationStatus() == ORIENTATION_STATUS_PORTRAIT_REVERSE)
208 rect.width = GetClientAreaBounds().width;
209 rect.height = GetClientAreaBounds().height - __pCallButtonsPanel->GetHeight();
211 else if (GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE || GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE_REVERSE)
213 rect.height = GetClientAreaBounds().height;
214 rect.width = GetClientAreaBounds().width - __pCallButtonsPanel->GetWidth();
217 AppLog("DTMF Keypad rect(%d,%d,%d,%d)",rect.x,rect.y,rect.width,rect.height);
218 __pDTMFKeypad = new (std::nothrow) DtmfKeyPadPanel();
219 __pDTMFKeypad->Initialize(this, rect);
220 AddControl(__pDTMFKeypad);
222 //set layout relation w.r.t call buttons panel
223 RelativeLayout* pRelativeLayout = dynamic_cast<RelativeLayout*>(GetLandscapeLayoutN());
224 if (pRelativeLayout != null)
226 pRelativeLayout->SetRelation(*__pDTMFKeypad, this, RECT_EDGE_RELATION_LEFT_TO_LEFT);
227 pRelativeLayout->SetRelation(*__pDTMFKeypad, __pCallButtonsPanel, RECT_EDGE_RELATION_RIGHT_TO_LEFT);
230 __pDTMFKeypad->SetShowState(true);
231 if(__DtmfString.IsEmpty() == false)
233 EditField* pTextBox = static_cast<EditField*>(__pDTMFKeypad->GetControl(IDC_TEXTBOX));
234 pTextBox->SetText(__DtmfString);
236 __pDTMFKeypad->Draw(true);
237 __pDTMFKeypad->Show();
241 ActiveCallForm::OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus)
245 if (__pCallButtonsPanel != null)
247 //update position of call buttons panel
248 Label* pKeysBgLbl = static_cast<Label*>(GetControl(IDC_KEY_BG_LABEL, true));
249 __pCallButtonsPanel->SetBounds(pKeysBgLbl->GetBounds());
251 //bring button on top
252 __pCallButtonsPanel->SetButtonPosition();
254 RelativeLayout* pRelativeLayout = dynamic_cast<RelativeLayout*>(GetPortraitLayoutN());
255 if (pRelativeLayout != null)
257 pRelativeLayout->SetRelation(*__pCallButtonsPanel, *pKeysBgLbl, RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM);
260 pRelativeLayout = dynamic_cast<RelativeLayout*>(GetLandscapeLayoutN());
261 if (pRelativeLayout != null)
263 pRelativeLayout->SetRelation(*__pCallButtonsPanel, *pKeysBgLbl, RECT_EDGE_RELATION_LEFT_TO_LEFT);
264 pRelativeLayout->SetRelation(*__pCallButtonsPanel, *pKeysBgLbl, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
267 //change orientation of DTMF Keypad, if it is visible.
268 if (__pDTMFKeypad != null)
270 if (orientationStatus == ORIENTATION_STATUS_LANDSCAPE || orientationStatus == ORIENTATION_STATUS_LANDSCAPE_REVERSE)
272 //in landscape mode, caller info is visible.
273 SetShowStateOnKeypad(true);
274 SetHoldButtonShowState(false);
276 else if (orientationStatus == ORIENTATION_STATUS_PORTRAIT || orientationStatus == ORIENTATION_STATUS_PORTRAIT_REVERSE)
278 //in Portrait mode it is hidden beneath DTMF Keypad.
279 SetShowStateOnKeypad(false);
281 if(__pDTMFKeypad->GetShowState() == true)
283 String dtmfText = static_cast<EditField*>(__pDTMFKeypad->GetControl(IDC_TEXTBOX))->GetText();
289 //More option is displayed recreate it
290 if(__pMoreOptionsListAnchor != null)
292 CreateMoreOptionsMenuList();
293 CreateMoreOptionsMenuList();
298 ActiveCallForm::HideDTMFKeypad(void)
300 if(__pDTMFKeypad != null)
302 __DtmfString = static_cast<EditField*>(__pDTMFKeypad->GetControl(IDC_TEXTBOX))->GetText();
304 RemoveControl(__pDTMFKeypad);
305 __pDTMFKeypad = null;
310 ActiveCallForm::InitializeCallButtonsPanel(void)
312 result r = E_SUCCESS;
313 //Set background bitmap for call keypad
314 Label* pKeysBgLbl = static_cast<Label*>(GetControl(IDC_KEY_BG_LABEL, true));
315 Bitmap* pBgBitmap = AppUtility::GetBitmapFromResourcesN(IDB_BACKGROUND_BITMAP, pKeysBgLbl->GetWidth(), pKeysBgLbl->GetHeight());
316 if (pBgBitmap != null)
318 pKeysBgLbl->SetBackgroundBitmap(*pBgBitmap);
321 if (__pCallButtonsPanel == null)
323 __pCallButtonsPanel = new (std::nothrow) CallButtonsPanel();
324 __pCallButtonsPanel->ConstructPanel(this, __formType);
325 __pCallButtonsPanel->SetBounds(pKeysBgLbl->GetBounds());
326 r = AddControl(__pCallButtonsPanel);
329 RelativeLayout* pRelativeLayout = dynamic_cast<RelativeLayout*>(GetPortraitLayoutN());
330 if (pRelativeLayout != null)
332 pRelativeLayout->SetRelation(*__pCallButtonsPanel, *pKeysBgLbl, RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM);
334 pRelativeLayout = dynamic_cast<RelativeLayout*>(GetLandscapeLayoutN());
335 if (pRelativeLayout != null)
337 pRelativeLayout->SetRelation(*__pCallButtonsPanel, *pKeysBgLbl, RECT_EDGE_RELATION_LEFT_TO_LEFT);
338 pRelativeLayout->SetRelation(*__pCallButtonsPanel, *pKeysBgLbl, RECT_EDGE_RELATION_RIGHT_TO_RIGHT);
339 pRelativeLayout->SetRelation(*__pCallButtonsPanel, *pKeysBgLbl, RECT_EDGE_RELATION_BOTTOM_TO_BOTTOM);
340 pRelativeLayout->SetRelation(*__pCallButtonsPanel, *pKeysBgLbl, RECT_EDGE_RELATION_TOP_TO_TOP);
347 ActiveCallForm::InitializeSwapButton(void)
349 Button* pSwapBtn = static_cast<Button*>(GetControl(IDC_SWAP_BUTTON));
352 Bitmap* pSwapBmp = AppUtility::GetBitmapFromResourcesN(IDB_SWAP_ICON_NORMAL,
353 W_HOLD_BITMAP, H_HOLD_BITMAP);
356 pSwapBtn->SetNormalBitmap(Point(0, 0), *pSwapBmp);
361 pSwapBmp = AppUtility::GetBitmapFromResourcesN(IDB_SWAP_ICON_PRESS,
362 W_HOLD_BITMAP, H_HOLD_BITMAP);
365 pSwapBtn->SetPressedBitmap(Point(0, 0), *pSwapBmp);
369 pSwapBtn->SetActionId(IDA_SWAP_CALLS);
370 pSwapBtn->AddActionEventListener(*this);
375 ActiveCallForm::InitializeManageConfCallButton(void)
377 Button* pMoreBtn = static_cast<Button*>(GetControl(IDC_CONF_CALL_MORE_BUTTON));
378 if (pMoreBtn != null)
380 pMoreBtn->SetActionId(IDA_MORE_OPTIONS_MENU);
381 pMoreBtn->AddActionEventListener(*this);
382 if (__formType == FORMTYPE_MULTIPLECALLS)
384 //Correct state will be set in OnSceneActivated based on the call
385 pMoreBtn->SetShowState(false);
387 else if (__formType == FORMTYPE_ACTIVECONFCALL)
389 pMoreBtn->SetShowState(true);
395 ActiveCallForm::InitializeHoldButton(void)
397 Button* pHoldBtn = static_cast<Button*>(GetControl(IDC_HOLD_BUTTON));
398 if (pHoldBtn != null)
400 //set status of Hold Button
401 SetHoldButtonStatus(true);
402 pHoldBtn->AddActionEventListener(*this);
407 ActiveCallForm::SetHoldButtonStatus(bool toHoldCall)
409 //background bitmap & button name
411 Bitmap* normalImg = null;
412 Bitmap* pressImg = null;
415 btnName.Append(AppUtility::GetResourceString(IDS_HOLD_BTN_NAME));
416 normalImg = AppUtility::GetBitmapFromResourcesN(IDB_HOLD_NORMAL_BUTTON_ICON,
417 W_HOLD_BITMAP, H_HOLD_BITMAP);
418 pressImg = AppUtility::GetBitmapFromResourcesN(IDB_HOLD_PRESS_BUTTON_ICON,
419 W_HOLD_BITMAP, H_HOLD_BITMAP);
423 btnName.Append(AppUtility::GetResourceString(IDS_UNHOLD_BTN_NAME));
424 normalImg = AppUtility::GetBitmapFromResourcesN(IDB_UNHOLD_NORMAL_BUTTON_ICON,
425 W_HOLD_BITMAP, H_HOLD_BITMAP);
426 pressImg = AppUtility::GetBitmapFromResourcesN(IDB_UNHOLD_PRESS_BUTTON_ICON,
427 W_HOLD_BITMAP, H_HOLD_BITMAP);
431 CommandIds cmdId = IDA_HOLD_CALL;
434 case FORMTYPE_ACTIVECALL:
436 cmdId = toHoldCall ? IDA_HOLD_CALL : IDA_UNHOLD_CALL;
440 case FORMTYPE_ACTIVECONFCALL:
442 cmdId = toHoldCall ? IDA_HOLD_CONF_CALL : IDA_UNHOLD_CONF_CALL;
450 //set background bitmap, button name & action id
451 Button* pHoldBtn = static_cast<Button*>(GetControl(IDC_HOLD_BUTTON));
452 Label* pHoldLbl = static_cast<Label*>(GetControl(IDC_HOLD_LABEL));
455 pHoldBtn->SetActionId(cmdId);
456 pHoldBtn->SetNormalBitmap(Point(0, 0),*normalImg);
457 pHoldBtn->SetPressedBitmap(Point(0, 0),*pressImg);
461 pHoldLbl->SetText(btnName);
462 pHoldLbl->Invalidate(true);
473 ActiveCallForm::CreateMoreOptionsMenuList(void)
475 //create option list anchor
476 if (__pMoreOptionsListAnchor == null)
478 Bitmap* pBgPopupArwBmp = AppUtility::GetBitmapFromResourcesN(IDB_POPUP_ARROW_ICON, W_OPTION_ANCHOR,
480 __pMoreOptionsListAnchor = new (std::nothrow) Label();
481 __pMoreOptionsListAnchor->Construct(Rectangle(GetWidth()-W_RIGHT_MORE_ICON_MARGIN - W_MORE_ICON, Y_POPUP_ANCHOR, W_POPUP_ANCHOR, H_POPUP_ANCHOR), L"");
482 __pMoreOptionsListAnchor->SetBackgroundBitmap(*pBgPopupArwBmp);
484 delete pBgPopupArwBmp;
485 pBgPopupArwBmp = null;
487 // Adds a Label to the Form
488 AddControl(__pMoreOptionsListAnchor);
491 //create options menu list
492 if (__pMoreOptionsList == null)
494 __pMoreOptionsList = new (std::nothrow) ListView();
495 __pMoreOptionsList->Construct(Rectangle(Point(GetWidth()-W_RIGHT_MORE_ICON_MARGIN - W_MORE_LABEL,H_MORE_LABEL), IDI_OPTIONMENU_DIMEN), false, SCROLL_STYLE_FADE_OUT);
496 __pMoreOptionsList->SetItemProvider(*this);
497 __pMoreOptionsList->AddListViewItemEventListener(*this);
498 //Add option list to the form
499 AddControl(__pMoreOptionsList);
503 //Hide option menu list
504 DestroyMoreOptionsMenuList();
509 ActiveCallForm::DestroyMoreOptionsMenuList(void)
511 if (__pMoreOptionsListAnchor != null)
513 //removes and delete the child control
514 RemoveControl(__pMoreOptionsListAnchor);
515 __pMoreOptionsListAnchor = null;
518 if (__pMoreOptionsList != null)
520 //removes and delete the child control
521 RemoveControl(__pMoreOptionsList);
522 __pMoreOptionsList = null;
527 ActiveCallForm::OnTerminating(void)
529 result r = E_SUCCESS;
530 if (__pCallPresentor != null)
532 __pCallPresentor = null;
538 ActiveCallForm::OnActionPerformed(const Control& source, int actionId)
546 //End the currently active / dialing call
547 if (__pActiveCallInfo->IsConferenceCall() == false)
549 String activeContactNo;
550 activeContactNo.Append(__pActiveCallInfo->GetContactNumber());
551 //Check if it is call is in dialing state, then
552 if (__formType == FORMTYPE_EMERGENCYOUTGOINGCALL || __formType == FORMTYPE_OUTGOINGCALL)
554 __pCallPresentor->EndDialingCall(activeContactNo);
559 __pCallPresentor->EndActiveCall(*__pActiveCallInfo->GetCallHandle());
564 __pCallPresentor->EndConferenceCall();
569 case IDA_END_CONF_CALL:
571 AppAssert(__formType == FORMTYPE_ACTIVECONFCALL);
572 __pCallPresentor->EndConferenceCall();
576 case IDA_OPEN_NUMKEYPAD:
578 if (GetOrientationStatus() == ORIENTATION_STATUS_PORTRAIT || GetOrientationStatus() == ORIENTATION_STATUS_PORTRAIT_REVERSE)
580 //hide only in portrait mode.
581 SetShowStateOnKeypad(false);
583 //Hide the hold button as it goes behind DTMF keypad
584 SetHoldButtonShowState(false);
586 __pCallButtonsPanel->SetKeypadButtonState(IDA_CLOSE_NUMKEYPAD);
590 case IDA_CLOSE_NUMKEYPAD:
592 SetShowStateOnKeypad(true);
594 __pCallButtonsPanel->SetKeypadButtonState(IDA_OPEN_NUMKEYPAD);
600 //switch to Dialer Form to make an call
601 if(__pCallPresentor->GetCurrentCallCount() == 1)
603 __pCallPresentor->LaunchDialAppControl();
611 if (__pActiveCallInfo->IsConferenceCall() == false)
613 if(__pActiveCallInfo->GetCallHandle() != null)
615 success = __pCallPresentor->HoldCall(*__pActiveCallInfo->GetCallHandle());
620 success = __pCallPresentor->HoldConferenceCall();
622 //reset hold status and "OnHold" text
623 ShowTimerInfo(IDC_CALLER1_TIME_LABEL, success);
624 if(__pActiveCallTimer != null)
626 __pActiveCallTimer->Cancel();
628 SetHoldButtonStatus(!success);
632 case IDA_UNHOLD_CALL:
634 bool success = false;
635 if (__pActiveCallInfo->IsConferenceCall() == false)
637 if(__pActiveCallInfo->GetCallHandle() != null)
639 success = __pCallPresentor->UnHoldCall(*__pActiveCallInfo->GetCallHandle());
644 success = __pCallPresentor->ActivateConferenceCall();
646 //reset hold status and show call timer
647 ShowTimerInfo(IDC_CALLER1_TIME_LABEL, !success, __activeCallStartTime);
648 SetHoldButtonStatus(success);
652 case IDA_HOLD_CONF_CALL:
654 AppAssert(__formType == FORMTYPE_ACTIVECONFCALL);
655 bool success = __pCallPresentor->HoldConferenceCall();
656 //reset hold status and "OnHold" text
657 SetHoldButtonStatus(!success);
658 ShowTimerInfo(IDC_CALLER1_TIME_LABEL, success);
659 if(__pActiveCallTimer != null)
661 __pActiveCallTimer->Cancel();
666 case IDA_UNHOLD_CONF_CALL:
668 AppAssert(__formType == FORMTYPE_ACTIVECONFCALL);
669 bool success = __pCallPresentor->ActivateConferenceCall();
670 //reset hold status and show call timer
671 ShowTimerInfo(IDC_CALLER1_TIME_LABEL, !success, __activeCallStartTime);
672 SetHoldButtonStatus(success);
676 case IDA_OPEN_CONTACTS:
679 //Launch call application
680 AppManager* pAppManager = AppManager::GetInstance();
681 pAppManager->LaunchApplication(PROVIDER_ID_CONTACTS);
687 bool success = __pCallPresentor->SetMuteStatus(true);
690 __pCallButtonsPanel->SetMuteButtonState(IDA_UNMUTE);
697 bool success = __pCallPresentor->SetMuteStatus(false);
700 __pCallButtonsPanel->SetMuteButtonState(IDA_MUTE);
707 bool success = __pCallPresentor->SetSpeakerStatus(true);
710 __pCallButtonsPanel->SetSpeakerButtonState(IDA_SPEAKER_OFF);
715 case IDA_SPEAKER_OFF:
717 bool success = __pCallPresentor->SetSpeakerStatus(false);
720 __pCallButtonsPanel->SetSpeakerButtonState(IDA_SPEAKER);
727 AppAssert(__formType == FORMTYPE_MULTIPLECALLS);
728 __pCallPresentor->JoinCall();
734 if(IsSwapInProgress() == false)
736 AppAssert(__formType == FORMTYPE_MULTIPLECALLS);
737 __pCallPresentor->SwapCalls();
738 SetSwapInProgress(true);
743 case IDA_MORE_OPTIONS_MENU:
745 //Show 'more' options menu
746 CreateMoreOptionsMenuList();
752 dtmfString.Append(L"0");
753 SetTextToDTMFTextField(dtmfString);
754 __pCallPresentor->SendDTMFSignal(dtmfString);
760 dtmfString.Append(L"1");
761 SetTextToDTMFTextField(dtmfString);
762 __pCallPresentor->SendDTMFSignal(dtmfString);
768 dtmfString.Append(L"2");
769 SetTextToDTMFTextField(dtmfString);
770 __pCallPresentor->SendDTMFSignal(dtmfString);
776 dtmfString.Append(L"3");
777 SetTextToDTMFTextField(dtmfString);
778 __pCallPresentor->SendDTMFSignal(dtmfString);
784 dtmfString.Append(L"4");
785 SetTextToDTMFTextField(dtmfString);
786 __pCallPresentor->SendDTMFSignal(dtmfString);
792 dtmfString.Append(L"5");
793 SetTextToDTMFTextField(dtmfString);
794 __pCallPresentor->SendDTMFSignal(dtmfString);
800 dtmfString.Append(L"6");
801 SetTextToDTMFTextField(dtmfString);
802 __pCallPresentor->SendDTMFSignal(dtmfString);
808 dtmfString.Append(L"7");
809 SetTextToDTMFTextField(dtmfString);
810 __pCallPresentor->SendDTMFSignal(dtmfString);
816 dtmfString.Append(L"8");
817 SetTextToDTMFTextField(dtmfString);
818 __pCallPresentor->SendDTMFSignal(dtmfString);
824 dtmfString.Append(L"9");
825 SetTextToDTMFTextField(dtmfString);
826 __pCallPresentor->SendDTMFSignal(dtmfString);
832 dtmfString.Append(L"*");
833 SetTextToDTMFTextField(dtmfString);
834 __pCallPresentor->SendDTMFSignal(dtmfString);
840 dtmfString.Append(L"#");
841 SetTextToDTMFTextField(dtmfString);
842 __pCallPresentor->SendDTMFSignal(dtmfString);
852 ActiveCallForm::IsSwapInProgress(void)
854 return __isSwapInProgress;
858 ActiveCallForm::SetSwapInProgress(bool progress)
860 __isSwapInProgress = progress;
864 ActiveCallForm::SetTextToDTMFTextField(const String& dtmfStr)
866 if(__pDTMFKeypad != null)
868 EditField* pTextBox = static_cast<EditField*>(__pDTMFKeypad->GetControl(IDC_TEXTBOX));
870 int startpos=-1,endpos=-1;
871 pTextBox->GetBlockRange(startpos,endpos);
875 pTextBox->ReleaseBlock();
878 pTextBox->InsertTextAtCursorPosition(dtmfStr);
879 //pTextBox->AppendText(dtmfStr);
880 pTextBox->SetFocus();
881 pTextBox->Invalidate(true);
886 ActiveCallForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& currentSceneId, IList* pArgs)
889 //set itself as listener
890 __pCallPresentor->SetTelEventListener(this);
891 AddOrientationEventListener(*this);
893 CallApp* pPhoneApp = static_cast<CallApp*>(CallApp::GetInstance());
894 pPhoneApp->AddAppStateChangeListener(*this);
896 //Initialize keypad and buttons
897 InitializeCallButtonsPanel();
899 AddressbookManager* pAddressbookManager = AddressbookManager::GetInstance();
900 __pAddressbook = pAddressbookManager->GetAddressbookN(DEFAULT_ADDRESSBOOK_ID);
901 if(__pAddressbook != null)
903 __pAddressbook->SetAddressbookChangeEventListener(this);
907 if (__pActiveCallInfo != null)
909 delete __pActiveCallInfo;
910 __pActiveCallInfo = null;
912 if (__pHeldCallInfo != null)
914 delete __pHeldCallInfo;
915 __pHeldCallInfo = null;
917 DestroyMoreOptionsMenuList();
921 case FORMTYPE_OUTGOINGCALL:
924 contactNo.Append(*(static_cast<String*>(pArgs->GetAt(0))));
925 __pActiveCallInfo = new (std::nothrow) AppCallInfo();
926 __pActiveCallInfo->SetContactNumber(contactNo);
927 Contact* pContact = __pCallPresentor->GetContactN(contactNo);
928 if (pContact != null)
930 __pActiveCallInfo->SetContactInfo(*pContact);
933 ShowPersonDetails(contactNo, IDC_NUMBER1_LABEL, IDC_CALLER1_LABEL, false,__pActiveCallInfo);
934 //make an normal outgoing call
935 __pCallPresentor->DialCall(contactNo, false);
939 case FORMTYPE_EMERGENCYOUTGOINGCALL:
941 String* pContactNo = static_cast<String*>(pArgs->GetAt(0));
942 __pActiveCallInfo = new (std::nothrow) AppCallInfo();
943 long long phNumber = 0;
944 LongLong::Parse(*pContactNo, phNumber);
945 __pActiveCallInfo->SetContactNumber(*pContactNo);
946 //make an emergency call
947 __pCallPresentor->DialCall(*pContactNo, true);
951 case FORMTYPE_ACTIVECALL:
954 AppCallInfo* pCall = static_cast<AppCallInfo*>(pArgs->GetAt(0));
956 __pActiveCallInfo = new (std::nothrow) AppCallInfo();
957 *__pActiveCallInfo = *pCall;
958 String activeContactNo;
959 if(pCall->GetContactNumber().IsEmpty() == false)
961 activeContactNo.Append(pCall->GetContactNumber());
965 activeContactNo.Append(AppUtility::GetResourceString(IDS_NUMBER_UNKNOWN));
967 ShowPersonDetails(activeContactNo, IDC_NUMBER1_LABEL, IDC_CALLER1_LABEL, false,__pActiveCallInfo);
969 //show call active time using Timer
970 __activeCallStartTime = pCall->GetCallConnectTime();
971 ShowTimerInfo(IDC_CALLER1_TIME_LABEL, pCall->IsOnHold(), __activeCallStartTime);
975 case FORMTYPE_EMERGENCYACTIVECALL:
978 AppCallInfo* pCall = static_cast<AppCallInfo*>(pArgs->GetAt(0));
980 __pActiveCallInfo = new (std::nothrow) AppCallInfo();
981 *__pActiveCallInfo = *pCall;
983 //show call active time using Timer
984 __activeCallStartTime = pCall->GetCallConnectTime();
985 ShowTimerInfo(IDC_CALLER1_TIME_LABEL, pCall->IsOnHold(), __activeCallStartTime);
989 case FORMTYPE_MULTIPLECALLS:
991 IListT<AppCallInfo>* pCallsList = __pCallPresentor->GetCallListN();
993 UpdateMultipleCallScreen(*pCallsList);
999 case FORMTYPE_ACTIVECONFCALL:
1002 AppCallInfo* pConfInfo = static_cast<AppCallInfo*>(pArgs->GetAt(0));
1003 __pActiveCallInfo = new (std::nothrow) AppCallInfo();
1004 *__pActiveCallInfo = *pConfInfo;
1006 int participantsCount = __pActiveCallInfo->GetCallerListCount();
1008 // show participant count on name Label
1009 Label* pPeopleCountLbl = static_cast<Label*>(GetControl(IDC_PARTICIPANTS_LABEL));
1010 if (pPeopleCountLbl)
1013 count.Append(participantsCount);
1015 count.Append(AppUtility::GetResourceString(IDS_PEOPLE_STR));
1016 pPeopleCountLbl->SetText(count);
1019 if(participantsCount >= IDI_MAX_CONF_CALL_PARTICIPANTS)
1021 __pCallButtonsPanel->EnableAddCallButton(false);
1025 __pCallButtonsPanel->EnableAddCallButton(true);
1028 //show call active time using Timer
1029 __activeCallStartTime = __pActiveCallInfo->GetCallConnectTime();
1030 ShowTimerInfo(IDC_CALLER1_TIME_LABEL, __pActiveCallInfo->IsOnHold(),__activeCallStartTime);
1038 if(__formType == FORMTYPE_ACTIVECALL || __formType == FORMTYPE_EMERGENCYACTIVECALL ||
1039 __formType == FORMTYPE_MULTIPLECALLS || __formType == FORMTYPE_ACTIVECONFCALL)
1041 //Unlock the phone if its locked
1042 if(LockManager::GetInstance()->IsLocked())
1044 AppLogDebug("Phone Locked");
1045 LockManager::GetInstance()->Unlock();
1049 //Hide DTMFKeypad, if visible and show caller info
1051 SetShowStateOnKeypad(true);
1052 __pCallButtonsPanel->SetKeypadButtonState(IDA_OPEN_NUMKEYPAD);
1054 //Set the correct speaker status
1055 if(__pCallPresentor->IsSpeakerOn() == true)
1057 __pCallButtonsPanel->SetSpeakerButtonState(IDA_SPEAKER_OFF);
1061 __pCallButtonsPanel->SetSpeakerButtonState(IDA_SPEAKER);
1064 //Set the correct Mute status
1065 if (__pCallPresentor->IsCallMuted() == true)
1067 __pCallButtonsPanel->SetMuteButtonState(IDA_UNMUTE);
1071 __pCallButtonsPanel->SetMuteButtonState(IDA_MUTE);
1081 CallApp* pCallApp = static_cast<CallApp*>(CallApp::GetInstance());
1082 pCallApp->SetTopMostWindow(false);
1086 ActiveCallForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& nextSceneId)
1088 RemoveOrientationEventListener(*this);
1089 if (__pCallButtonsPanel != null)
1091 // RemoveControl(__pCallButtonsPanel);
1092 __pCallButtonsPanel = null;
1094 if (__pActiveCallTimer != null)
1096 __pActiveCallTimer->Cancel();
1097 delete __pActiveCallTimer;
1098 __pActiveCallTimer = null;
1100 if (__pSmallPhotoLabel != null)
1102 __pSmallPhotoLabel->SetShowState(false);
1104 //Hide "Manage conf. Call" Context menu
1105 if (__pMoreOptionsListAnchor != null)
1107 __pMoreOptionsListAnchor->SetShowState(false);
1109 if (__pMoreOptionsList != null)
1111 __pMoreOptionsList->SetShowState(false);
1113 __DtmfString.Clear();
1114 CallApp* pCallApp = static_cast<CallApp*>(CallApp::GetInstance());
1115 pCallApp->RemoveAppStateChangeListener(*this);
1116 if(__pAddressbook != null)
1118 __pAddressbook->SetAddressbookChangeEventListener(null);
1123 ActiveCallForm::HandleConfCallChanged(void)
1126 AppAssert((__formType == FORMTYPE_ACTIVECONFCALL) || (__formType == FORMTYPE_MULTIPLECALLS));
1127 //fetch changed conference call info
1128 AppCallInfo* pConfCallInfo = __pCallPresentor->GetConferenceCallInfoN();
1129 if (pConfCallInfo == null)
1135 //fetch participant count in conf call
1136 int participantsCount = pConfCallInfo->GetCallerListCount();
1137 //update status of join and Add call
1138 bool isEnableAddCall = false;
1139 bool isEnableJoinCall = false;
1140 if(participantsCount < IDI_MAX_CONF_CALL_PARTICIPANTS)
1142 //available only at Active conf. call or active call screen
1143 isEnableAddCall = true;
1144 //join button is available only at multiple call screen
1145 isEnableJoinCall = true;
1148 Label* pPeopleCountLbl = null;
1149 if (__pActiveCallInfo != null && __pActiveCallInfo->IsConferenceCall() == true)
1151 //Active call is conference call
1152 delete __pActiveCallInfo;
1153 __pActiveCallInfo = new (std::nothrow) AppCallInfo();
1154 *__pActiveCallInfo = *pConfCallInfo;
1156 if (__formType == FORMTYPE_MULTIPLECALLS)
1158 pPeopleCountLbl = static_cast<Label*>(GetControl(IDC_NUMBER1_LABEL));
1160 else if (__formType == FORMTYPE_ACTIVECONFCALL)
1162 pPeopleCountLbl = static_cast<Label*>(GetControl(IDC_PARTICIPANTS_LABEL));
1163 AppLog("Active conf call...(%d)", pPeopleCountLbl);
1166 else if(__pHeldCallInfo != null && __pHeldCallInfo->IsConferenceCall() == true)
1168 //Held call is conference call - this is definitely multiple call screen.
1169 delete __pHeldCallInfo;
1170 __pHeldCallInfo = new (std::nothrow) AppCallInfo();
1171 *__pHeldCallInfo = *pConfCallInfo;
1172 pPeopleCountLbl = static_cast<Label*>(GetControl(IDC_NUMBER2_LABEL));
1175 // update participant count on name Label
1176 if (pPeopleCountLbl != null)
1179 count.Append(participantsCount);
1181 count.Append(AppUtility::GetResourceString(IDS_PEOPLE_STR));
1182 pPeopleCountLbl->SetText(count);
1183 pPeopleCountLbl->Invalidate(true);
1185 //change AddCall Button status
1186 __pCallButtonsPanel->EnableAddCallButton(isEnableAddCall);
1187 //change JoinCall Button status
1188 __pCallButtonsPanel->EnableJoinCallButton(__pCallPresentor->IsEnableJoinCallButton());
1193 ActiveCallForm::OnContactsChanged(const Tizen::Base::Collection::IList& contactChangeInfoList)
1199 case FORMTYPE_EMERGENCYOUTGOINGCALL:
1204 case FORMTYPE_OUTGOINGCALL:
1205 case FORMTYPE_ACTIVECALL:
1207 String pContactNumber;
1208 pContactNumber.Append(__pActiveCallInfo->GetContactNumber());
1209 Contact* pContact = __pCallPresentor->GetContactN(__pActiveCallInfo->GetContactNumber());
1210 if(pContact == null)
1212 __pActiveCallInfo->ResetContactNumber(null);
1213 __pActiveCallInfo->ResetContactInfo(null);
1218 __pActiveCallInfo->SetContactNumber(pContactNumber);
1219 __pActiveCallInfo->SetContactInfo(*pContact);
1221 if(pContact != null)
1226 ShowPersonDetails(pContactNumber, IDC_NUMBER1_LABEL, IDC_CALLER1_LABEL, false,__pActiveCallInfo);
1230 case FORMTYPE_EMERGENCYACTIVECALL:
1235 case FORMTYPE_MULTIPLECALLS:
1238 IListT<AppCallInfo>* pCallsList = __pCallPresentor->GetCallListN();
1239 int listCount = pCallsList->GetCount();
1240 for(int index = 0; index < listCount; index++)
1242 AppCallInfo callInfo;
1244 pCallsList->GetAt(index, callInfo);
1245 if(__pActiveCallInfo == null)
1247 __pActiveCallInfo = new (std::nothrow) AppCallInfo();
1249 *__pActiveCallInfo = callInfo;
1250 String contactNumber;
1251 contactNumber.Append(__pActiveCallInfo->GetContactNumber());
1252 pContact = __pCallPresentor->GetContactN(__pActiveCallInfo->GetContactNumber());
1253 if(pContact == null)
1255 __pActiveCallInfo->ResetContactNumber(null);
1256 __pActiveCallInfo->ResetContactInfo(null);
1261 __pActiveCallInfo->SetContactNumber(contactNumber);
1262 __pActiveCallInfo->SetContactInfo(*pContact);
1264 if(pContact != null)
1269 if(callInfo.IsOnHold() == false)
1271 ShowPersonDetails(contactNumber, IDC_NUMBER1_LABEL, IDC_CALLER1_LABEL, false,__pActiveCallInfo);
1275 ShowPersonDetails(contactNumber, IDC_NUMBER2_LABEL, IDC_CALLER2_LABEL, true,__pActiveCallInfo);
1279 if(pCallsList != null)
1284 //pCallsList = __pCallPresentor->GetCallListN();
1285 //update calls state
1286 //UpdateMultipleCallScreen(*pCallsList);
1287 //delete pCallsList;
1288 //pCallsList = null;
1292 case FORMTYPE_ACTIVECONFCALL:
1294 int participantsCount = __pActiveCallInfo->GetCallerListCount();
1295 IListT<AppCallInfo>* pParticipantListCallHandles = __pActiveCallInfo->GetCallerList();
1296 for(int listCount = 0; listCount < participantsCount; listCount++)
1315 ActiveCallForm::OnCategoriesChanged(const Tizen::Base::Collection::IList& categoryChangeInfoList)
1322 ActiveCallForm::UpdateMultipleCallScreen(Tizen::Base::Collection::IListT<AppCallInfo>& activeCallsList)
1325 if(__pActiveCallInfo != null)
1327 delete __pActiveCallInfo;
1328 __pActiveCallInfo = null;
1330 if(__pHeldCallInfo != null)
1332 delete __pHeldCallInfo;
1333 __pHeldCallInfo = null;
1336 Button* pMoreBtn = static_cast<Button*>(GetControl(IDC_CONF_CALL_MORE_BUTTON));
1337 if (pMoreBtn != null)
1339 pMoreBtn->SetShowState(false);
1342 //show caller's info.
1343 for (int index = 0; index < activeCallsList.GetCount(); index++)
1346 AppCallInfo callInfo;
1347 activeCallsList.GetAt(index, callInfo);
1350 if(callInfo.GetContactNumber().IsEmpty() == false)
1352 contactNo.Append(callInfo.GetContactNumber());
1356 contactNo.Append(AppUtility::GetResourceString(IDS_NUMBER_UNKNOWN));
1359 if (callInfo.IsOnHold() == false)
1361 __pActiveCallInfo = new (std::nothrow) AppCallInfo();
1362 *__pActiveCallInfo = callInfo;
1364 if (__pActiveCallInfo->IsConferenceCall() == false)
1366 Label* pVoiceIconLbl = static_cast<Label*>(GetControl(IDC_VOICE_CALL_ICON_LABEL));
1369 pVoiceIconLbl->SetShowState(true);
1371 if (pMoreBtn != null)
1373 pMoreBtn->SetShowState(false);
1375 ShowPersonDetails(contactNo, IDC_NUMBER1_LABEL, IDC_CALLER1_LABEL, false,__pActiveCallInfo);
1376 if(__pMoreOptionsListAnchor != null && __pMoreOptionsListAnchor->GetShowState() == true)
1378 CreateMoreOptionsMenuList();
1383 // show participant count on name Label
1384 Label* pPeopleCountLbl = static_cast<Label*>(GetControl(IDC_NUMBER1_LABEL));
1385 if (pPeopleCountLbl)
1388 count.Append(__pActiveCallInfo->GetCallerListCount());
1390 count.Append(AppUtility::GetResourceString(IDS_PEOPLE_STR));
1391 pPeopleCountLbl->SetText(count);
1393 String nameStr = AppUtility::GetResourceString(L"IDS_CONFERENCE_CALL_STRING");
1394 Label* pNameLbl = static_cast<Label*>(GetControl(IDC_CALLER1_LABEL));
1397 pNameLbl->SetText(nameStr);
1399 Label* pVoiceIconLbl = static_cast<Label*>(GetControl(IDC_VOICE_CALL_ICON_LABEL));
1402 pVoiceIconLbl->SetShowState(false);
1404 if (pMoreBtn != null)
1406 pMoreBtn->SetShowState(true);
1408 Bitmap* pPhotoBitmap = AppUtility::GetBitmapFromResourcesN(IDB_CONFERENCE_BG_ICON,W_CONFERENCE_PHOTO,H_CONFERENCE_PHOTO);
1409 if (pPhotoBitmap != null)
1411 Label* pPhotoLbl = static_cast<Label*>(GetControl(IDC_CALLER1_PHOTO_LABEL));
1414 pPhotoLbl->SetBackgroundBitmap(*pPhotoBitmap);
1415 pPhotoLbl->Invalidate(true);
1417 delete pPhotoBitmap;
1420 //show call active time using Timer
1421 __activeCallStartTime = __pActiveCallInfo->GetCallConnectTime();
1422 ShowTimerInfo(IDC_CALLER1_TIME_LABEL,false,__activeCallStartTime);
1426 __pHeldCallInfo = new (std::nothrow) AppCallInfo();
1427 *__pHeldCallInfo = callInfo;
1429 if (__pHeldCallInfo->IsConferenceCall() == false)
1431 ShowPersonDetails(contactNo, IDC_NUMBER2_LABEL, IDC_CALLER2_LABEL, true,__pHeldCallInfo);
1435 // show participant count on name Label
1436 Label* pPeopleCountLbl = static_cast<Label*>(GetControl(IDC_NUMBER2_LABEL));
1437 if (pPeopleCountLbl)
1440 count.Append(__pHeldCallInfo->GetCallerListCount());
1442 count.Append(AppUtility::GetResourceString(IDS_PEOPLE_STR));
1443 pPeopleCountLbl->SetText(count);
1445 String nameStr = AppUtility::GetResourceString(L"IDS_CONFERENCE_CALL_STRING");
1446 Label* pNameLbl = static_cast<Label*>(GetControl(IDC_CALLER2_LABEL));
1449 pNameLbl->SetText(nameStr);
1451 Bitmap* pPhotoBitmap = AppUtility::GetBitmapFromResourcesN(IDB_CONFERENCE_BG_ICON,W_CONFERENCE_PHOTO,H_CONFERENCE_PHOTO);
1452 if (pPhotoBitmap != null)
1454 Label* pPhotoLbl = static_cast<Label*>(GetControl(IDC_CALLER2_PHOTO_LABEL));
1457 pPhotoLbl->SetBackgroundBitmap(*pPhotoBitmap);
1458 pPhotoLbl->Invalidate(true);
1460 delete pPhotoBitmap;
1464 ShowTimerInfo(IDC_CALLER2_TIME_LABEL, true);
1468 //update JoinCall button status
1469 __pCallButtonsPanel->EnableJoinCallButton(__pCallPresentor->IsEnableJoinCallButton());
1475 ActiveCallForm::ShowPersonDetails(const String& phoneNumber, const String& contactLblName, const String& nameLblName, bool isSecondCaller, AppCallInfo* pCallInfo)
1477 result r = E_FAILURE;
1479 //call individual methods to show contact number, caller name & photo
1480 ShowPhoneNumber(phoneNumber, contactLblName);
1482 //fetch contact details based on phone number
1483 String* pDisplayName = pCallInfo->FetchLatestCallerNameN(phoneNumber);
1484 ShowCallerName(*pDisplayName, nameLblName);
1486 Bitmap* pPhotoBitmap = pCallInfo->FetchLatestCallerPhotoN(phoneNumber);
1487 ShowCallerPhoto(pPhotoBitmap, isSecondCaller);
1492 delete pDisplayName;
1493 pDisplayName = null;
1497 delete pPhotoBitmap;
1498 pPhotoBitmap = null;
1503 ActiveCallForm::ShowPhoneNumber(const String& phoneNumber, const String& contactLblName)
1505 String formattedNumber = phoneNumber;
1507 Label* pContactLbl = static_cast<Label*>(GetControl(contactLblName));
1510 pContactLbl->SetText(formattedNumber);
1511 pContactLbl->Invalidate(true);
1516 ActiveCallForm::ShowCallerName(const String& callerName, const String& nameLblName)
1518 // show display name on name Label
1519 Label* pNameLbl = static_cast<Label*>(GetControl(nameLblName));
1522 //passing an empty string to SetText fails in label,
1523 //if previously valid text has been set
1524 if (callerName.IsEmpty() == true && pNameLbl->GetText().IsEmpty() == false)
1526 String stringToBeSet(L" ");
1527 pNameLbl->SetText(stringToBeSet);
1531 pNameLbl->SetText(callerName);
1533 pNameLbl->Invalidate(true);
1538 ActiveCallForm::ShowCallerPhoto(Bitmap* pPhotoId, bool isSecondCaller)
1540 //to check if default image is to be shown
1541 bool showDefaultPhoto = false;
1542 bool showSmallPhoto = false;
1543 String photoLabel("");
1547 case FORMTYPE_OUTGOINGCALL:
1548 case FORMTYPE_ACTIVECALL:
1550 if (pPhotoId == null)
1552 //show default caller image
1553 showDefaultPhoto = true;
1557 //Check the size of photo
1558 // Now checking the condition with && but actually it should be ||
1559 //But for now keeping it as && because _pContact->GetThubNail() returns image width as
1560 // height 270 and width = 480 . So all images set thru gallery is show as small image
1561 if(pPhotoId->GetHeight() <= H_SMALL_PHOTO
1562 && pPhotoId->GetWidth() <= W_SMALL_PHOTO)
1564 showSmallPhoto = true;
1568 photoLabel.Append(IDC_CALLER1_BIGPHOTO_LABEL);
1572 case FORMTYPE_MULTIPLECALLS:
1576 photoLabel.Append(IDC_CALLER2_PHOTO_LABEL);
1580 photoLabel.Append(IDC_CALLER1_PHOTO_LABEL);
1583 if (pPhotoId == null)
1585 showDefaultPhoto = true;
1589 if (pPhotoId->GetHeight() <= H_SMALL_PHOTO
1590 && pPhotoId->GetWidth() <= W_SMALL_PHOTO)
1592 //pPhotoId->Scale(Dimension(W_CONFERENCE_PHOTO,H_CONFERENCE_PHOTO));
1593 showSmallPhoto = true;
1603 //Remove small photo label
1604 if (__pSmallPhotoLabel != null)
1606 RemoveControl(__pSmallPhotoLabel);
1607 __pSmallPhotoLabel = null;
1610 //show photo - for Big Photo Id, Animated Call Image
1611 if (!showDefaultPhoto)
1613 if(showSmallPhoto == true)
1615 ShowThumbnailImage(pPhotoId,photoLabel);
1619 Label* pPhotoLbl = static_cast<Label*>(GetControl(photoLabel));
1622 Canvas* pCanvas = new (std::nothrow) Canvas;
1623 Rectangle canvasRect(Rectangle(0, 0, pPhotoLbl->GetBounds().width, pPhotoLbl->GetBounds().height));
1624 pCanvas->Construct(canvasRect);
1625 //draw the contact bitmap
1626 pCanvas->DrawBitmap(canvasRect,*pPhotoId);
1627 Bitmap* pNewPhotoId = new Bitmap();
1628 pNewPhotoId->Construct(*pCanvas, pCanvas->GetBounds());
1631 pPhotoLbl->SetBackgroundBitmap(*pNewPhotoId);
1632 pPhotoLbl->Invalidate(true);
1639 Bitmap* pDefaultPhoto = null;
1642 case FORMTYPE_OUTGOINGCALL:
1643 case FORMTYPE_ACTIVECALL:
1644 pDefaultPhoto = AppUtility::GetBitmapFromResourcesN(IDB_ACTIVE_CALL_DEFAULT_ICON,W_CONFERENCE_PHOTO,W_CONFERENCE_PHOTO);
1647 case FORMTYPE_MULTIPLECALLS:
1648 pDefaultPhoto = AppUtility::GetBitmapFromResourcesN(IDB_MULTIPLE_CALL_DEFAULT_ICON,W_CONFERENCE_PHOTO,H_CONFERENCE_PHOTO);
1651 case FORMTYPE_ACTIVECONFCALL:
1652 pDefaultPhoto = AppUtility::GetBitmapFromResourcesN(IDB_CONFERENCE_BIG_BG_ICON,W_CONFERENCE_PHOTO,W_CONFERENCE_PHOTO);
1658 if (pDefaultPhoto != null)
1660 Label* pPhotoLbl = static_cast<Label*>(GetControl(photoLabel));
1663 pPhotoLbl->SetBackgroundBitmap(*pDefaultPhoto);
1664 pPhotoLbl->Invalidate(true);
1666 delete pDefaultPhoto;
1672 ActiveCallForm::ShowThumbnailImage(const Bitmap* pPhotoId,String& photoLabel)
1674 Label* pPhotoLbl = static_cast<Label*>(GetControl(photoLabel));
1676 if (pPhotoLbl != null && pPhotoId != null)
1678 Canvas* pCanvas = new (std::nothrow) Canvas;
1679 Bitmap* pBackground = AppUtility::GetBitmapFromResourcesN(IDB_CALL_THUMBNAIL_BACKGROUND,W_CALL_THUMBNAIL,H_CALL_THUMBNAIL);
1680 Bitmap* pShadow = AppUtility::GetBitmapFromResourcesN(IDB_CALL_THUMBNAIL_SHADOW,W_CALL_THUMBNAIL_SHADOW,H_CALL_THUMBNAIL_SHADOW);
1681 Rectangle canvasRect(Rectangle(0, 0, pPhotoLbl->GetBounds().width, pPhotoLbl->GetBounds().height));
1682 pCanvas->Construct(canvasRect);
1683 //draw the back ground
1684 pCanvas->DrawBitmap(canvasRect,*pBackground);
1685 //draw shadow (to be enabled after correct shadow image is provided )
1686 //pCanvas->DrawBitmap(Rectangle((pPhotoLbl->GetBounds().width/2)-(W_CALL_THUMBNAIL_SHADOW/2),
1687 // (pPhotoLbl->GetBounds().height/2)-(H_CALL_THUMBNAIL_SHADOW/2),W_CALL_THUMBNAIL_SHADOW,H_CALL_THUMBNAIL_SHADOW),*pShadow);
1688 //draw the contact bitmap
1689 pCanvas->DrawBitmap(Rectangle((pPhotoLbl->GetBounds().width/2)-(W_SMALL_PHOTO/2),
1690 (pPhotoLbl->GetBounds().height/2)-(H_SMALL_PHOTO/2),W_SMALL_PHOTO,H_SMALL_PHOTO),*pPhotoId);
1691 Bitmap* pNewPhotoId = new Bitmap();
1692 pNewPhotoId->Construct(*pCanvas, pCanvas->GetBounds());
1695 pPhotoLbl->SetBackgroundBitmap(*pNewPhotoId);
1696 pPhotoLbl->Invalidate(true);
1705 ActiveCallForm::ShowCallersPhotoThumbnail(const Bitmap& pPhotoId)
1707 if (__pSmallPhotoLabel != null)
1709 RemoveControl(__pSmallPhotoLabel);
1710 __pSmallPhotoLabel = null;
1712 //Draw Small Photo and show on small photo label
1713 __pSmallPhotoLabel = new (std::nothrow) Label();//static_cast<Label*>(GetControl(IDC_SMALL_PHOTO_LABEL));
1714 __pSmallPhotoLabel->Construct(Rectangle(X_PHOTO_LBL, Y_PHOTO_LBL, W_PHOTO_LBL, H_PHOTO_LBL), L"");
1715 __pSmallPhotoLabel->SetBackgroundColor(Color(0,0,0));
1716 __pSmallPhotoLabel->SetBackgroundBitmap(pPhotoId);
1717 // Add a Label to the Form
1718 AddControl(__pSmallPhotoLabel);
1719 __pSmallPhotoLabel->Invalidate(true);
1723 ActiveCallForm::ShowTimerInfo(const String& timerLblName, bool isOnHold, long long startTime)
1725 Label* pTimerLbl = static_cast<Label*>(GetControl(timerLblName));
1727 if (__pActiveCallTimer == null)
1729 __pActiveCallTimer = new (std::nothrow) Tizen::Base::Runtime::Timer();
1730 __pActiveCallTimer->Construct(*this);
1733 if (pTimerLbl != null)
1735 if (isOnHold == true)
1737 pTimerLbl->SetText(AppUtility::GetResourceString(IDS_TIMER_ON_HOLD));
1738 //update Hold button status
1739 SetHoldButtonStatus(false);
1743 //update Hold button status
1744 SetHoldButtonStatus(true);
1745 //current system time
1746 long long currTime = 0;
1747 SystemTime::GetTicks(currTime);
1749 TimeSpan diffSpan(abs(startTime - currTime));
1751 String activeCallTime(L"");
1753 long long hr = diffSpan.GetHours();
1756 activeCallTime.Append("0");
1758 activeCallTime.Append(hr);
1759 activeCallTime.Append(L":");
1761 long long min = diffSpan.GetMinutes();
1764 activeCallTime.Append("0");
1766 activeCallTime.Append(min);
1767 activeCallTime.Append(L":");
1769 long long sec = diffSpan.GetSeconds();
1772 activeCallTime.Append("0");
1774 activeCallTime.Append(sec);
1776 pTimerLbl->SetText(activeCallTime);
1777 __pActiveCallTimer->StartAsRepeatable(TimeSpan::NUM_OF_TICKS_IN_SECOND);
1779 pTimerLbl->Invalidate(true);
1784 ActiveCallForm::SetHoldButtonShowState(bool showState)
1786 Label* pLblControl = static_cast<Label*>(GetControl(IDC_HOLD_LABEL));
1787 if(pLblControl != null)
1789 pLblControl->SetShowState(showState);
1791 Button* pButtonControl = static_cast<Button*>(GetControl(IDC_HOLD_BUTTON));
1792 if(pButtonControl != null)
1794 pButtonControl->SetShowState(showState);
1799 ActiveCallForm::SetShowStateOnKeypad(bool showState)
1801 Label* pLblControl = static_cast<Label*>(GetControl(IDC_CALLER1_LABEL));
1802 pLblControl->SetShowState(showState);
1803 pLblControl = static_cast<Label*>(GetControl(IDC_BACKGROUND_LABEL));
1804 pLblControl->SetShowState(showState);
1805 pLblControl = static_cast<Label*>(GetControl(IDC_CALLER1_TIME_LABEL));
1806 pLblControl->SetShowState(showState);
1807 if (__pSmallPhotoLabel != null)
1809 __pSmallPhotoLabel->SetShowState(showState);
1814 case FORMTYPE_ACTIVECALL:
1816 pLblControl = static_cast<Label*>(GetControl(IDC_NUMBER1_LABEL));
1817 pLblControl->SetShowState(showState);
1818 pLblControl = static_cast<Label*>(GetControl(IDC_VOICE_CALL_ICON_LABEL));
1819 pLblControl->SetShowState(showState);
1820 SetHoldButtonShowState(showState);
1824 case FORMTYPE_MULTIPLECALLS:
1826 pLblControl = static_cast<Label*>(GetControl(IDC_NUMBER1_LABEL));
1827 pLblControl->SetShowState(showState);
1828 pLblControl = static_cast<Label*>(GetControl(IDC_CALLER2_LABEL));
1829 pLblControl->SetShowState(showState);
1830 pLblControl = static_cast<Label*>(GetControl(IDC_NUMBER2_LABEL));
1831 pLblControl->SetShowState(showState);
1832 pLblControl = static_cast<Label*>(GetControl(IDC_CALLER2_TIME_LABEL));
1833 pLblControl->SetShowState(showState);
1834 pLblControl = static_cast<Label*>(GetControl(IDC_SWAP_LABEL));
1835 pLblControl->SetShowState(showState);
1836 pLblControl = static_cast<Label*>(GetControl(IDC_BACKGROUND_LABEL2));
1837 pLblControl->SetShowState(showState);
1838 if (__pActiveCallInfo != null && __pActiveCallInfo->IsConferenceCall() == false)
1840 pLblControl = static_cast<Label*>(GetControl(IDC_VOICE_CALL_ICON_LABEL));
1841 pLblControl->SetShowState(showState);
1845 Button* pButtonControl = static_cast<Button*>(GetControl(IDC_CONF_CALL_MORE_BUTTON));
1846 pButtonControl->SetShowState(showState);
1848 Button* pButtonControl = static_cast<Button*>(GetControl(IDC_SWAP_BUTTON));
1849 pButtonControl->SetShowState(showState);
1853 case FORMTYPE_ACTIVECONFCALL:
1855 pLblControl = static_cast<Label*>(GetControl(IDC_PARTICIPANTS_LABEL));
1856 pLblControl->SetShowState(showState);
1857 SetHoldButtonShowState(showState);
1858 Button* pButtonControl = static_cast<Button*>(GetControl(IDC_CONF_CALL_MORE_BUTTON));
1859 pButtonControl->SetShowState(showState);
1869 ActiveCallForm::OnTimerExpired(Tizen::Base::Runtime::Timer& timer)
1871 //Call default implementation of "Object.Equals()"
1872 //returns true, if they are pointing to same address.
1873 if (__pActiveCallTimer->Equals(timer))
1875 Label* pTimerLbl = static_cast<Label*>(GetControl(IDC_CALLER1_TIME_LABEL));
1878 String activeCallTime = pTimerLbl->GetText();
1879 // Create a StringTokenizer instance
1880 StringTokenizer strTokens(activeCallTime, L":");
1882 int count = strTokens.GetTokenCount(); // count == 3
1887 for (int index = 0; index < count; index++)
1892 strTokens.GetNextToken(token);
1893 Integer::Parse(token, hr);
1897 strTokens.GetNextToken(token);
1898 Integer::Parse(token, min);
1902 strTokens.GetNextToken(token);
1903 Integer::Parse(token, sec);
1909 if (sec == IDI_MAX_SECONDS)
1914 if (min == IDI_MAX_MINS)
1921 activeCallTime.Clear();
1924 activeCallTime.Append("0");
1926 activeCallTime.Append(hr);
1927 activeCallTime.Append(":");
1930 activeCallTime.Append("0");
1932 activeCallTime.Append(min);
1933 activeCallTime.Append(":");
1936 activeCallTime.Append("0");
1938 activeCallTime.Append(sec);
1939 //update timer label
1940 pTimerLbl->SetText(activeCallTime);
1941 pTimerLbl->Invalidate(true);
1946 ///////////////////////////////////////////////////////////
1947 /////////// Options Menu List Functionality /////////
1948 ///////////////////////////////////////////////////////////
1950 ActiveCallForm::OnListViewContextItemStateChanged(ListView& listView, int index, int elementId, ListContextItemStatus state)
1955 ActiveCallForm::OnListViewItemStateChanged(ListView& listView, int index, int elementId, ListItemStatus status)
1957 //Goto conference call list form
1958 SceneManager* pSceneManager = SceneManager::GetInstance();
1959 pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_CONFCALLLIST, SCENE_TRANSITION_ANIMATION_TYPE_NONE,
1960 SCENE_HISTORY_OPTION_NO_HISTORY, SCENE_DESTROY_OPTION_KEEP), null);
1964 ActiveCallForm::OnListViewItemSwept(ListView& listView, int index, SweepDirection direction)
1969 ActiveCallForm::OnListViewItemLongPressed(ListView& listView, int index, int elementId, bool& invokeListViewItemCallback)
1974 ActiveCallForm::GetItemCount(void)
1976 return IDI_MOREOPTIONS_LIST_ITEMS;
1980 ActiveCallForm::CreateItem(int index, int itemWidth)
1982 //create 1st Menu option
1983 CustomItem* pItem = new (std::nothrow) CustomItem();
1984 pItem->Construct(IDI_OPTIONMENU_DIMEN, LIST_ANNEX_STYLE_NORMAL);
1986 //Set background 9-patch bitmap to option menu
1987 Bitmap* pBgBmp = AppUtility::GetBitmapFromResourcesN(IDB_POPUP_BG_ICON);
1988 if (pBgBmp != null && pBgBmp->IsNinePatchedBitmap())
1991 bgCanvas.Construct(Rectangle(IDI_OPTIONMENU_POS, IDI_OPTIONMENU_DIMEN));
1992 bgCanvas.DrawNinePatchedBitmap(bgCanvas.GetBounds(), *pBgBmp);
1996 pItem->SetBackgroundColor(LIST_ITEM_DRAWING_STATUS_NORMAL, Color(40, 45, 48));
2001 //Set bitmap to option menu
2002 Bitmap* pNormalConfCallBmp = AppUtility::GetBitmapFromResourcesN(IDB_MORE_MANAGE_CONFERENCE_ICON ,
2003 W_MGR_CONFCALL_BITMAP, H_MGR_CONFCALL_BITMAP);
2004 pItem->AddElement(Rectangle(16, 17, W_MGR_CONFCALL_BITMAP, H_MGR_CONFCALL_BITMAP), 1, *pNormalConfCallBmp, null, null);
2005 // Deallocate bitmaps
2006 delete pNormalConfCallBmp;
2007 pNormalConfCallBmp = null;
2009 //Set text to menu option
2010 String confCallName = AppUtility::GetResourceString(IDS_MGR_CONF_CALL_LIST_STR);
2012 TextElement* pTextElement = new (std::nothrow) TextElement();
2013 pTextElement->Construct(confCallName);
2014 pTextElement->SetTextColor(COLOR_POPUP_TEXT);
2017 font.Construct(FONT_STYLE_PLAIN, IDI_POPUP_TEXT_SIZE);
2018 pTextElement->SetFont(font);
2019 //construct Enriched text
2020 EnrichedText* pEnrichedText = new (std::nothrow) EnrichedText();
2021 FloatDimension textDimension;
2022 font.GetTextExtent(confCallName, confCallName.GetLength(), textDimension);
2023 textDimension.height = textDimension.height + font.GetDescender();
2024 pEnrichedText->Construct(textDimension);
2025 //add text element to enriched text
2026 pEnrichedText->Add(*pTextElement);
2028 //Add Enriched text to pItem
2029 FloatPoint textPos(((2 * IDI_OPTIONMENU_ITEM_SPACING) + W_MGR_CONFCALL_BITMAP), ((IDI_OPTIONMENU_DIMEN.height - textDimension.height) / 2));
2030 pItem->AddElement(FloatRectangle(textPos, textDimension), 2, *pEnrichedText);
2032 pEnrichedText->RemoveAll(true);
2033 delete pEnrichedText;
2038 ActiveCallForm::DeleteItem(int index, ListItemBase* pItem, int itemWidth)
2045 ActiveCallForm::OnForeground(void)
2047 AppLogDebug("Enter");
2048 __pCallPresentor->OnAppForeground();