Fix for N_SE-51371
[apps/osp/Call.git] / src / CallActiveCallForm.cpp
index 19f0e18..4b9bae6 100644 (file)
@@ -65,7 +65,7 @@ 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 Dimension IDI_OPTIONMENU_DIMEN(486, 99);
 const int X_PHOTO_LBL = 166;
 const int Y_PHOTO_LBL = 232;
 const int W_PHOTO_LBL = 388;
@@ -97,6 +97,7 @@ 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";
+static const wchar_t* IDC_DTMF_KEY_BG_LABEL = L"IDC_DTMF_KEY_BG_LABEL";
 
 ActiveCallForm::ActiveCallForm(FormType formType)
        : BaseForm(formType)
@@ -191,7 +192,6 @@ ActiveCallForm::OnInitializing(void)
        InitializeSwapButton();
        //Initialize manage conf. call list form
        InitializeManageConfCallButton();
-
        __pCallPresentor = CallPresentationModel::GetInstance();
        return r;
 }
@@ -199,42 +199,11 @@ ActiveCallForm::OnInitializing(void)
 void
 ActiveCallForm::ShowDTMFKeypad(void)
 {
-       if(__pDTMFKeypad == null)
-       {
-               //update rect according to client screen area
-               Rectangle rect(0, 0, 0, 0);
-               if (GetOrientationStatus() == ORIENTATION_STATUS_PORTRAIT || GetOrientationStatus() == ORIENTATION_STATUS_PORTRAIT_REVERSE)
-               {
-                       rect.width = GetClientAreaBounds().width;
-                       rect.height = GetClientAreaBounds().height - __pCallButtonsPanel->GetHeight();
-               }
-               else if (GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE || GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE_REVERSE)
-               {
-                       rect.height = GetClientAreaBounds().height;
-                       rect.width = GetClientAreaBounds().width - __pCallButtonsPanel->GetWidth();
-               }
-
-               AppLog("DTMF Keypad rect(%d,%d,%d,%d)",rect.x,rect.y,rect.width,rect.height);
-               __pDTMFKeypad = new (std::nothrow) DtmfKeyPadPanel();
-               __pDTMFKeypad->Initialize(this, rect);
-               AddControl(__pDTMFKeypad);
-
-               //set layout relation w.r.t call buttons panel
-               RelativeLayout* pRelativeLayout = dynamic_cast<RelativeLayout*>(GetLandscapeLayoutN());
-               if (pRelativeLayout != null)
-               {
-                       pRelativeLayout->SetRelation(*__pDTMFKeypad, this, RECT_EDGE_RELATION_LEFT_TO_LEFT);
-                       pRelativeLayout->SetRelation(*__pDTMFKeypad, __pCallButtonsPanel, RECT_EDGE_RELATION_RIGHT_TO_LEFT);
-               }
-       }
+       EditField* pTextBox = static_cast<EditField*>(__pDTMFKeypad->GetControl(IDC_TEXTBOX));
        __pDTMFKeypad->SetShowState(true);
-       if(__DtmfString.IsEmpty() == false)
-       {
-               EditField* pTextBox = static_cast<EditField*>(__pDTMFKeypad->GetControl(IDC_TEXTBOX));
-               pTextBox->SetText(__DtmfString);
-       }
        __pDTMFKeypad->Draw(true);
        __pDTMFKeypad->Show();
+       pTextBox->SetFocus();
 }
 
 void
@@ -265,24 +234,60 @@ ActiveCallForm::OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui
                }
 
                //change orientation of DTMF Keypad, if it is visible.
-               if (__pDTMFKeypad != null)
+               if(__pDTMFKeypad != null)
+               {
+                       Rectangle rect(0, 0, 0, 0);
+                       if (orientationStatus == ORIENTATION_STATUS_LANDSCAPE || orientationStatus == ORIENTATION_STATUS_LANDSCAPE_REVERSE)
+                       {
+                               rect.height = GetClientAreaBounds().height;
+                               rect.width = GetClientAreaBounds().width - __pCallButtonsPanel->GetWidth();
+                       }
+                       else if (orientationStatus == ORIENTATION_STATUS_PORTRAIT || orientationStatus == ORIENTATION_STATUS_PORTRAIT_REVERSE)
+                       {
+                               rect.width = GetClientAreaBounds().width;
+                               rect.height = GetClientAreaBounds().height - __pCallButtonsPanel->GetHeight();
+                       }
+                       __pDTMFKeypad->SetBounds(rect);
+                       RelativeLayout* pRelativeLayout = dynamic_cast<RelativeLayout*>(GetLandscapeLayoutN());
+                       if (pRelativeLayout != null)
+                       {
+                               pRelativeLayout->SetRelation(*__pDTMFKeypad, this, RECT_EDGE_RELATION_LEFT_TO_LEFT);
+                               pRelativeLayout->SetRelation(*__pDTMFKeypad, __pCallButtonsPanel, RECT_EDGE_RELATION_RIGHT_TO_LEFT);
+                               pRelativeLayout->Update();
+                               delete pRelativeLayout;
+                       }
+                       pRelativeLayout = dynamic_cast<RelativeLayout*>(GetPortraitLayoutN());
+                       if (pRelativeLayout != null)
+                       {
+                               pRelativeLayout->SetRelation(*__pDTMFKeypad, this, RECT_EDGE_RELATION_LEFT_TO_LEFT);
+                               pRelativeLayout->SetRelation(*__pDTMFKeypad, __pCallButtonsPanel, RECT_EDGE_RELATION_BOTTOM_TO_TOP);
+                               pRelativeLayout->Update();
+                               delete pRelativeLayout;
+                       }
+                       __pDTMFKeypad->setKeysPanelBounds();
+                       __pDTMFKeypad->InvalidateBounds(rect);
+                       __pDTMFKeypad->Invalidate(true);
+
+                       //HideDTMFKeypad();
+                       //ShowDTMFKeypad();
+               }
+
+               //change orientation of DTMF Keypad, if it is visible.
+               if (__pDTMFKeypad != null && __pDTMFKeypad->GetShowState() == true)
                {
                        if (orientationStatus == ORIENTATION_STATUS_LANDSCAPE || orientationStatus == ORIENTATION_STATUS_LANDSCAPE_REVERSE)
                        {
                                //in landscape mode, caller info is visible.
                                SetShowStateOnKeypad(true);
+                               //Hide few labels and buttons in landscape mode when DTMF keypad is shown
+                               SetShowStateOnKeypadLandscape(false);
                                SetHoldButtonShowState(false);
                        }
                        else if (orientationStatus == ORIENTATION_STATUS_PORTRAIT || orientationStatus == ORIENTATION_STATUS_PORTRAIT_REVERSE)
                        {
                                //in Portrait mode it is hidden beneath DTMF Keypad.
                                SetShowStateOnKeypad(false);
-                       }
-                       if(__pDTMFKeypad->GetShowState() == true)
-                       {
-                               String dtmfText = static_cast<EditField*>(__pDTMFKeypad->GetControl(IDC_TEXTBOX))->GetText();
-                               HideDTMFKeypad();
-                               ShowDTMFKeypad();
+                               DestroyMoreOptionsMenuList();
                        }
                }
        }
@@ -300,9 +305,7 @@ ActiveCallForm::HideDTMFKeypad(void)
        if(__pDTMFKeypad != null)
        {
                __DtmfString = static_cast<EditField*>(__pDTMFKeypad->GetControl(IDC_TEXTBOX))->GetText();
-
-               RemoveControl(__pDTMFKeypad);
-               __pDTMFKeypad = null;
+               __pDTMFKeypad->SetShowState(false);
        }
 }
 
@@ -532,6 +535,10 @@ ActiveCallForm::OnTerminating(void)
        {
                __pCallPresentor = null;
        }
+       if(__pDTMFKeypad != null)
+       {
+               __pDTMFKeypad = null;
+       }
        return r;
 }
 
@@ -576,11 +583,55 @@ ActiveCallForm::OnActionPerformed(const Control& source, int actionId)
 
        case IDA_OPEN_NUMKEYPAD:
        {
+               if(__pDTMFKeypad != null)
+               {
+                       Rectangle rect(0, 0, 0, 0);
+                       if (GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE || GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE_REVERSE)
+                       {
+                               rect.height = GetClientAreaBounds().height;
+                               rect.width = GetClientAreaBounds().width - __pCallButtonsPanel->GetWidth();
+                       }
+                       else if (GetOrientationStatus() == ORIENTATION_STATUS_PORTRAIT || GetOrientationStatus() == ORIENTATION_STATUS_PORTRAIT_REVERSE)
+                       {
+                               rect.width = GetClientAreaBounds().width;
+                               rect.height = GetClientAreaBounds().height - __pCallButtonsPanel->GetHeight();
+                       }
+                       __pDTMFKeypad->SetBounds(rect);
+                       RelativeLayout* pRelativeLayout = dynamic_cast<RelativeLayout*>(GetLandscapeLayoutN());
+                       if (pRelativeLayout != null)
+                       {
+                               pRelativeLayout->SetRelation(*__pDTMFKeypad, this, RECT_EDGE_RELATION_LEFT_TO_LEFT);
+                               pRelativeLayout->SetRelation(*__pDTMFKeypad, __pCallButtonsPanel, RECT_EDGE_RELATION_RIGHT_TO_LEFT);
+                               pRelativeLayout->Update();
+                               delete pRelativeLayout;
+                       }
+                       pRelativeLayout = dynamic_cast<RelativeLayout*>(GetPortraitLayoutN());
+                       if (pRelativeLayout != null)
+                       {
+                               pRelativeLayout->SetRelation(*__pDTMFKeypad, this, RECT_EDGE_RELATION_LEFT_TO_LEFT);
+                               pRelativeLayout->SetRelation(*__pDTMFKeypad, __pCallButtonsPanel, RECT_EDGE_RELATION_BOTTOM_TO_TOP);
+                               pRelativeLayout->Update();
+                               delete pRelativeLayout;
+                       }
+                       __pDTMFKeypad->setKeysPanelBounds();
+                       __pDTMFKeypad->InvalidateBounds(rect);
+                       __pDTMFKeypad->Invalidate(true);
+
+               }
+
+
+
                if (GetOrientationStatus() == ORIENTATION_STATUS_PORTRAIT || GetOrientationStatus() == ORIENTATION_STATUS_PORTRAIT_REVERSE)
                {
                        //hide only in portrait mode.
                        SetShowStateOnKeypad(false);
+                       DestroyMoreOptionsMenuList();
                }
+               if (GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE || GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE_REVERSE)
+               {
+                       SetShowStateOnKeypadLandscape(false);
+               }
+
                //Hide the hold button as it goes behind DTMF keypad
                SetHoldButtonShowState(false);
                ShowDTMFKeypad();
@@ -590,7 +641,14 @@ ActiveCallForm::OnActionPerformed(const Control& source, int actionId)
 
        case IDA_CLOSE_NUMKEYPAD:
        {
-               SetShowStateOnKeypad(true);
+               if (GetOrientationStatus() == ORIENTATION_STATUS_PORTRAIT || GetOrientationStatus() == ORIENTATION_STATUS_PORTRAIT_REVERSE)
+               {
+                       SetShowStateOnKeypad(true);
+               }
+               if (GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE || GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE_REVERSE)
+               {
+                       SetShowStateOnKeypadLandscape(true);
+               }
                HideDTMFKeypad();
                __pCallButtonsPanel->SetKeypadButtonState(IDA_OPEN_NUMKEYPAD);
        }
@@ -878,7 +936,7 @@ ActiveCallForm::SetTextToDTMFTextField(const String& dtmfStr)
 
                pTextBox->InsertTextAtCursorPosition(dtmfStr);
                //pTextBox->AppendText(dtmfStr);
-               pTextBox->SetFocus();
+       //      pTextBox->SetFocus();
                pTextBox->Invalidate(true);
        }
 }
@@ -897,6 +955,33 @@ ActiveCallForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId&
        //Initialize keypad and buttons
        InitializeCallButtonsPanel();
 
+       if(__pDTMFKeypad == null)
+       {
+               Rectangle rect(0, 0, 0, 0);
+               if (GetOrientationStatus() == ORIENTATION_STATUS_PORTRAIT || GetOrientationStatus() == ORIENTATION_STATUS_PORTRAIT_REVERSE)
+               {
+                       rect.width = GetClientAreaBounds().width;
+                       rect.height = GetClientAreaBounds().height - __pCallButtonsPanel->GetHeight();
+               }
+               else if (GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE || GetOrientationStatus() == ORIENTATION_STATUS_LANDSCAPE_REVERSE)
+               {
+                       rect.height = GetClientAreaBounds().height;
+                       rect.width = GetClientAreaBounds().width - __pCallButtonsPanel->GetWidth();
+               }
+
+               AppLog("DTMF Keypad rect(%d,%d,%d,%d)",rect.x,rect.y,rect.width,rect.height);
+               __pDTMFKeypad = new (std::nothrow) DtmfKeyPadPanel();
+               __pDTMFKeypad->Initialize(this, rect);
+               //set layout relation w.r.t call buttons panel
+               RelativeLayout* pRelativeLayout = dynamic_cast<RelativeLayout*>(GetLandscapeLayoutN());
+               if (pRelativeLayout != null)
+               {
+                       pRelativeLayout->SetRelation(*__pDTMFKeypad, this, RECT_EDGE_RELATION_LEFT_TO_LEFT);
+                       pRelativeLayout->SetRelation(*__pDTMFKeypad, __pCallButtonsPanel, RECT_EDGE_RELATION_RIGHT_TO_LEFT);
+               }
+               AddControl(__pDTMFKeypad);
+       }
+
        AddressbookManager* pAddressbookManager = AddressbookManager::GetInstance();
        __pAddressbook = pAddressbookManager->GetAddressbookN(DEFAULT_ADDRESSBOOK_ID);
        if(__pAddressbook != null)
@@ -966,9 +1051,9 @@ ActiveCallForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId&
                        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();
+               //__activeCallStartTime = pCall->GetCallConnectTime();
+               __activeCallStartTime = pCall->GetDurationTime();
                ShowTimerInfo(IDC_CALLER1_TIME_LABEL, pCall->IsOnHold(), __activeCallStartTime);
        }
        break;
@@ -982,7 +1067,8 @@ ActiveCallForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId&
                *__pActiveCallInfo =  *pCall;
 
                //show call active time using Timer
-               __activeCallStartTime = pCall->GetCallConnectTime();
+               //__activeCallStartTime = pCall->GetCallConnectTime();
+               __activeCallStartTime = pCall->GetDurationTime();
                ShowTimerInfo(IDC_CALLER1_TIME_LABEL, pCall->IsOnHold(), __activeCallStartTime);
        }
        break;
@@ -1026,8 +1112,14 @@ ActiveCallForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId&
                        __pCallButtonsPanel->EnableAddCallButton(true);
                }
 
+
+               //bring button on top
+               __pCallButtonsPanel->SetButtonPosition();
+
+
                //show call active time using Timer
-               __activeCallStartTime = __pActiveCallInfo->GetCallConnectTime();
+               //__activeCallStartTime = __pActiveCallInfo->GetCallConnectTime();
+               __activeCallStartTime = __pActiveCallInfo->GetDurationTime();
                ShowTimerInfo(IDC_CALLER1_TIME_LABEL, __pActiveCallInfo->IsOnHold(),__activeCallStartTime);
        }
        break;
@@ -1050,6 +1142,7 @@ ActiveCallForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId&
        //Hide DTMFKeypad, if visible and show caller info
        HideDTMFKeypad();
        SetShowStateOnKeypad(true);
+       SetShowStateOnKeypadLandscape(true);
        __pCallButtonsPanel->SetKeypadButtonState(IDA_OPEN_NUMKEYPAD);
 
        //Set the correct speaker status
@@ -1079,6 +1172,10 @@ ActiveCallForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId&
                pArgs = null;
        }
 
+       //update position of call buttons panel
+       Label* pKeysBgLbl = static_cast<Label*>(GetControl(IDC_KEY_BG_LABEL, true));
+       __pCallButtonsPanel->SetBounds(pKeysBgLbl->GetBounds());
+
        CallApp* pCallApp = static_cast<CallApp*>(CallApp::GetInstance());
        pCallApp->SetTopMostWindow(false);
 }
@@ -1107,6 +1204,12 @@ ActiveCallForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId&
                __pMoreOptionsList->SetShowState(false);
        }
        __DtmfString.Clear();
+
+       if(__pDTMFKeypad != null)
+       {
+               __pDTMFKeypad->SetShowState(false);
+       }
+
        CallApp* pCallApp = static_cast<CallApp*>(CallApp::GetInstance());
        pCallApp->RemoveAppStateChangeListener(*this);
        if(__pAddressbook != null)
@@ -1259,6 +1362,10 @@ ActiveCallForm::OnContactsChanged(const Tizen::Base::Collection::IList& contactC
                                        delete pContact;
                                        pContact = null;
                                }
+                               if(callInfo.IsConferenceCall() == true)
+                               {
+                                       continue;
+                               }
                                if(callInfo.IsOnHold() == false)
                                {
                                        ShowPersonDetails(contactNumber, IDC_NUMBER1_LABEL, IDC_CALLER1_LABEL, false,__pActiveCallInfo);
@@ -1388,7 +1495,8 @@ ActiveCallForm::UpdateMultipleCallScreen(Tizen::Base::Collection::IListT<AppCall
                                }
                        }
                        //show call active time using Timer
-                       __activeCallStartTime = __pActiveCallInfo->GetCallConnectTime();
+                       //__activeCallStartTime = __pActiveCallInfo->GetCallConnectTime();
+                       __activeCallStartTime = __pActiveCallInfo->GetDurationTime();
                        ShowTimerInfo(IDC_CALLER1_TIME_LABEL,false,__activeCallStartTime);
                }
                else
@@ -1714,7 +1822,9 @@ ActiveCallForm::ShowTimerInfo(const String& timerLblName, bool isOnHold, long lo
                        SetHoldButtonStatus(true);
                        //current system time
                        long long currTime = 0;
-                       SystemTime::GetTicks(currTime);
+                       //SystemTime::GetTicks(currTime);
+                       CallApp* pPhoneApp = static_cast<CallApp*>(CallApp::GetInstance());
+                       currTime = pPhoneApp->GetCallAppTicks();
                        //Set call duration
                        TimeSpan diffSpan(abs(startTime - currTime));
 
@@ -1766,6 +1876,40 @@ ActiveCallForm::SetHoldButtonShowState(bool showState)
 }
 
 void
+ActiveCallForm::SetShowStateOnKeypadLandscape(bool showState)
+{
+       switch (__formType)
+               {
+               case FORMTYPE_ACTIVECONFCALL:
+               case FORMTYPE_ACTIVECALL:
+               {
+                       SetHoldButtonShowState(showState);
+               }
+               break;
+
+               case FORMTYPE_MULTIPLECALLS:
+               {
+                       Label* 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);
+                       Button* pButtonControl = static_cast<Button*>(GetControl(IDC_SWAP_BUTTON));
+                       pButtonControl->SetShowState(showState);
+               }
+               break;
+
+               default:
+                       break;
+               }
+}
+
+void
 ActiveCallForm::SetShowStateOnKeypad(bool showState)
 {
        Label* pLblControl = static_cast<Label*>(GetControl(IDC_CALLER1_LABEL));