Fix for N_SE-52426 N_SE-52427 N_SE-51292 N_SE-51259
authorAmith Kumar Mahale <amith.m@samsung.com>
Tue, 17 Sep 2013 06:22:51 +0000 (11:52 +0530)
committerAmith Kumar Mahale <amith.m@samsung.com>
Tue, 17 Sep 2013 13:57:00 +0000 (19:27 +0530)
Change-Id: I4597b601856b3af20cc6784d2fa94a7a001c2f45
Signed-off-by: Amith Kumar Mahale <amith.m@samsung.com>
12 files changed:
inc/CallActiveCallForm.h
inc/CallBaseForm.h
inc/CallConfCallerListForm.h
inc/CallITelephonyEventListener.h
inc/CallPresentationModel.h
inc/CallTelephonyManager.h
src/CallActiveCallForm.cpp
src/CallBaseForm.cpp
src/CallConfCallerListForm.cpp
src/CallIncomingCallForm.cpp
src/CallPresentationModel.cpp
src/CallTelephonyManager.cpp

index 3c2d985..b3c0002 100644 (file)
@@ -47,6 +47,7 @@ class ActiveCallForm
        , public Tizen::Base::Runtime::ITimerEventListener
        , public Tizen::Ui::IOrientationEventListener
        , public Tizen::Social::IAddressbookChangeEventListener
+       , public Tizen::Ui::IPropagatedKeyEventListener
 {
 public:
        ActiveCallForm(FormType formType);
@@ -54,6 +55,13 @@ public:
        //From BaseForm
        virtual void Initialize(void);
        void SetSwapInProgress(bool progress);
+       void SetCallStateInProgress(bool progress);
+       void SetConfCallStateInProgress(bool progress);
+       void OnHoldTelephonyCallback(bool isHeld);
+       void OnActiveTelephonyCallback(bool isActive);
+       void OnConfCallHoldTelephonyCallback(bool isHeld);
+       void OnConfCallActiveTelephonyCallback(bool isActive);
+
 
 public:
        virtual result OnInitializing(void);
@@ -69,6 +77,7 @@ public:
        void HandleConfCallChanged(void);
        // Used to update multiple call screen
        void UpdateMultipleCallScreen(Tizen::Base::Collection::IListT<AppCallInfo>& activeCallsList);
+       //Handle hold conference call
        //IAddressbookChangeEventListener
        virtual void OnContactsChanged(const Tizen::Base::Collection::IList& contactChangeInfoList);
        virtual void OnCategoriesChanged(const Tizen::Base::Collection::IList& categoryChangeInfoList);
@@ -126,6 +135,13 @@ private:
        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);
 
+       //IPropagatedKeyEventListener
+       virtual bool OnKeyPressed(Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo);
+       virtual bool OnKeyReleased(Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo){ return false; };
+       virtual bool OnPreviewKeyPressed(Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo){ return false; }
+       virtual bool OnPreviewKeyReleased(Control& source, const Tizen::Ui::KeyEventInfo& keyEventInfo){ return false; }
+       virtual bool TranslateKeyEventInfo(Control& source, Tizen::Ui::KeyEventInfo& keyEventInfo) { return false; }
+
        //From IListViewItemProvider
        virtual Tizen::Ui::Controls::ListItemBase* CreateItem(int index, int itemWidth);
        virtual bool DeleteItem(int index, Tizen::Ui::Controls::ListItemBase* pItem, int itemWidth);
@@ -134,6 +150,8 @@ private:
        void ShowThumbnailImage(const Tizen::Graphics::Bitmap* pPhotoId,Tizen::Base::String& photoLabel);
        //Check if swap in progress
        bool IsSwapInProgress(void);
+       bool IsCallStateInProgress(void);
+       bool IsConfCallStateInProgress(void);
 
 private:
        //Start time for Active call
@@ -153,6 +171,8 @@ private:
        AppCallInfo* __pActiveCallInfo;
        AppCallInfo* __pHeldCallInfo;
        bool            __isSwapInProgress;
+       bool            __isCallStateInProgress;
+       bool            __isConfCallStateInProgress;
 };
 
 #endif  //_PHN_ACTIVE_CALL_FORM_H_
index 448026b..47c3de6 100644 (file)
@@ -72,8 +72,12 @@ public:
        //Event Listener methods from ITelephonyEventListener
        virtual void HandleCallConnected(Tizen::Base::Collection::IListT<AppCallInfo>& pCallList);
        virtual void HandleCallDisconnected(bool isLastCall, Tizen::Base::Collection::IListT<AppCallInfo>& pCallList);
+       virtual void HandleCallHeld(bool isHeld);
+       virtual void HandleCallActive(bool isActive);
        virtual void HandleConferenceCall(AppCallInfo& pCallInfo);
        virtual void HandleIncomingCall(AppCallInfo& pCallInfo);
+       virtual void HandleConfCallHoldOccured(bool success);
+       virtual void HandleConfCallActiveOccured(bool success);
        virtual void HandleCallSwapOccured(Tizen::Base::Collection::IListT<AppCallInfo>& pCallList);
        virtual void HandleConferenceChange(void);
        virtual void HandleTelephonyError(int errorCode);
index b9b70b8..e5587eb 100644 (file)
@@ -62,7 +62,10 @@ public:
 
        //Disable all the elements
        void DisableAllControls(void);
-       //
+       void OnConfCallHoldTelephoneCallBackOccured(bool success);
+       void OnConfCallActiveTelephoneCallBackOccured(bool success);
+       bool IsConfCallStateInProgress(void);
+       void SetConfCallStateInProgress(bool progress);
        // From 'Container'.
        // Called when the container needs to draw itself. @n
        // Users can override this method to display user-specific drawings. @n
@@ -101,6 +104,7 @@ private:
        Tizen::Social::Addressbook* __pAddressbook;
        Tizen::Ui::Controls::TableView* __pList;
        bool            __isCallSplit;
+       bool            __isConfCallStateInProgress;
 };
 
 #endif  //_PHN_CONF_CALLER_LIST_FORM_H_
index fd27b37..71b52e1 100644 (file)
@@ -52,6 +52,18 @@ public:
        virtual void HandleCallDisconnected(bool isLastCall, Tizen::Base::Collection::IListT<AppCallInfo>& pCallList) = 0;
 
        /**
+        * This function is called when a call is held. It returns the list of active calls
+        *
+        * @param[out]          isHeld  -       true for currently held call
+        */
+       virtual void HandleCallHeld(bool isHeld) = 0;
+       /**
+       * This function is called when a call is active. It returns the list of active calls
+       *
+       * @param[out]           isActive        -       true for currently active call
+       */
+       virtual void HandleCallActive(bool isActive) = 0;
+       /**
         * This function is called when two calls are joined and a conference call is setup.
         *
         * @param[in]           pCallInfo       -       The conference call information data.
@@ -72,6 +84,20 @@ public:
         */
        virtual void HandleCallSwapOccured(Tizen::Base::Collection::IListT<AppCallInfo>& pCallList) = 0;
 
+       /*
+        * Called when the conference call is held.
+        * Implement this to handle voice call events.
+        * @param[out]          success         -       If true then the conference call is successfully held else not.
+        */
+       virtual void HandleConfCallHoldOccured(bool success) = 0;
+
+       /*
+        * Called when the conference call is active.
+        * Implement this to handle voice call events.
+        * @param[out]          success         -       If true then the conference call is successfully active
+        */
+       virtual void HandleConfCallActiveOccured(bool success) = 0;
+
        /**
         * Called when the conference list changes.
         * Implement this to handle voice call events.
index 1762c7b..02f7ae6 100644 (file)
@@ -168,8 +168,12 @@ public:
        virtual void HandleConferenceCall(AppCallInfo& pCallInfo);
        virtual void HandleIncomingCall(AppCallInfo& pCallInfo);
        virtual void HandleCallSwapOccured(Tizen::Base::Collection::IListT<AppCallInfo>& pCallList);
+       virtual void HandleConfCallHoldOccured(bool success);
+       virtual void HandleConfCallActiveOccured(bool success);
        virtual void HandleConferenceChange(void);
        virtual void HandleTelephonyError(int errorCode);
+       virtual void HandleCallHeld(bool isHeld);
+       virtual void HandleCallActive(bool isActive);
        //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);
        virtual void OnAppForeground(void);
index fd39c4e..0fae267 100644 (file)
@@ -99,6 +99,12 @@ public:
        static void HandleCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData);
        //Hold Callback
        static void HandleHoldCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData);
+       //Active Callback
+       static void HandleActiveCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData);
+       //Hold Conference CallBack
+       static void HandleHoldConferenceCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData);
+       //Active Conference CallBack
+       static void HandleActiveConferenceCallbackResponse(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
index 65199da..a48774e 100644 (file)
@@ -111,6 +111,8 @@ ActiveCallForm::ActiveCallForm(FormType formType)
        __pActiveCallInfo = null;
        __pHeldCallInfo = null;
        __isSwapInProgress = false;
+       __isCallStateInProgress = false;
+       __isConfCallStateInProgress = false;
        __pAddressbook = null;
 }
 
@@ -203,6 +205,7 @@ ActiveCallForm::ShowDTMFKeypad(void)
        __pDTMFKeypad->SetShowState(true);
        __pDTMFKeypad->Draw(true);
        __pDTMFKeypad->Show();
+       pTextBox->SetPropagatedKeyEventListener(this);
        pTextBox->SetFocus();
 }
 
@@ -398,8 +401,10 @@ ActiveCallForm::HideDTMFKeypad(void)
 {
        if(__pDTMFKeypad != null)
        {
-               __DtmfString = static_cast<EditField*>(__pDTMFKeypad->GetControl(IDC_TEXTBOX))->GetText();
+               EditField* pTextBox = static_cast<EditField*>(__pDTMFKeypad->GetControl(IDC_TEXTBOX));
+               __DtmfString = pTextBox->GetText();
                __pDTMFKeypad->SetShowState(false);
+               pTextBox->SetPropagatedKeyEventListener(null);
        }
 }
 
@@ -609,14 +614,18 @@ ActiveCallForm::DestroyMoreOptionsMenuList(void)
        if (__pMoreOptionsListAnchor != null)
        {
                //removes and delete the child control
-               RemoveControl(__pMoreOptionsListAnchor);
+               //Commented this for the bug N_SE-52426 and added SetShowState(false) below
+               //RemoveControl(__pMoreOptionsListAnchor);
+               __pMoreOptionsListAnchor->SetShowState(false);
                __pMoreOptionsListAnchor = null;
        }
 
        if (__pMoreOptionsList != null)
        {
                //removes and delete the child control
-               RemoveControl(__pMoreOptionsList);
+               //Commented this for the bug N_SE-52426 and added SetShowState(false) below
+               //RemoveControl(__pMoreOptionsList);
+               __pMoreOptionsList->SetShowState(false);
                __pMoreOptionsList = null;
        }
 }
@@ -765,20 +774,17 @@ ActiveCallForm::OnActionPerformed(const Control& source, int actionId)
                {
                        if(__pActiveCallInfo->GetCallHandle() != null)
                        {
-                               success = __pCallPresentor->HoldCall(*__pActiveCallInfo->GetCallHandle());
+                               if(IsCallStateInProgress() == false)
+                               {
+                                       success = __pCallPresentor->HoldCall(*__pActiveCallInfo->GetCallHandle());
+                                       SetCallStateInProgress(true);
+                               }
                        }
                }
                else
                {
                        success = __pCallPresentor->HoldConferenceCall();
                }
-               //reset hold status and "OnHold" text
-               ShowTimerInfo(IDC_CALLER1_TIME_LABEL, success);
-               if(__pActiveCallTimer != null)
-               {
-                       __pActiveCallTimer->Cancel();
-               }
-               SetHoldButtonStatus(!success);
        }
        break;
 
@@ -789,29 +795,27 @@ ActiveCallForm::OnActionPerformed(const Control& source, int actionId)
                {
                        if(__pActiveCallInfo->GetCallHandle() != null)
                        {
-                               success = __pCallPresentor->UnHoldCall(*__pActiveCallInfo->GetCallHandle());
+                               if(IsCallStateInProgress() == false)
+                               {
+                                       success = __pCallPresentor->UnHoldCall(*__pActiveCallInfo->GetCallHandle());
+                                       SetCallStateInProgress(true);
+                               }
                        }
                }
                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)
+               if(IsConfCallStateInProgress() == false)
                {
-                       __pActiveCallTimer->Cancel();
+                       bool success = __pCallPresentor->HoldConferenceCall();
+                       SetConfCallStateInProgress(true);
                }
        }
        break;
@@ -819,10 +823,11 @@ ActiveCallForm::OnActionPerformed(const Control& source, int actionId)
        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);
+               if(IsConfCallStateInProgress() == false)
+               {
+                       bool success = __pCallPresentor->ActivateConferenceCall();
+                       SetConfCallStateInProgress(true);
+               }
        }
        break;
 
@@ -1002,11 +1007,61 @@ ActiveCallForm::OnActionPerformed(const Control& source, int actionId)
 }
 
 bool
+ActiveCallForm::IsConfCallStateInProgress(void)
+{
+       return __isConfCallStateInProgress;
+}
+
+
+bool
+ActiveCallForm::IsCallStateInProgress(void)
+{
+       return __isCallStateInProgress;
+}
+
+bool
 ActiveCallForm::IsSwapInProgress(void)
 {
        return __isSwapInProgress;
 }
 
+
+void
+ActiveCallForm::OnActiveTelephonyCallback(bool isActive)
+{
+       AppLogDebug("Enter");
+       //reset hold status and show call timer
+       ShowTimerInfo(IDC_CALLER1_TIME_LABEL, !isActive, __activeCallStartTime);
+       SetHoldButtonStatus(isActive);
+       SetCallStateInProgress(false);
+}
+
+void
+ActiveCallForm::OnHoldTelephonyCallback(bool isHeld)
+{
+       AppLogDebug("Enter");
+       //reset hold status and "OnHold" text
+       ShowTimerInfo(IDC_CALLER1_TIME_LABEL, isHeld);
+       if(__pActiveCallTimer != null)
+       {
+               __pActiveCallTimer->Cancel();
+       }
+       SetHoldButtonStatus(!isHeld);
+       SetCallStateInProgress(false);
+}
+
+void
+ActiveCallForm::SetConfCallStateInProgress(bool progress)
+{
+       __isConfCallStateInProgress = progress;
+}
+
+void
+ActiveCallForm::SetCallStateInProgress(bool progress)
+{
+       __isCallStateInProgress = progress;
+}
+
 void
 ActiveCallForm::SetSwapInProgress(bool progress)
 {
@@ -1492,6 +1547,28 @@ ActiveCallForm::OnCategoriesChanged(const Tizen::Base::Collection::IList& catego
        //No implementation
 }
 
+void
+ActiveCallForm::OnConfCallHoldTelephonyCallback(bool isHeld)
+{
+       //reset hold status and "OnHold" text
+       SetHoldButtonStatus(!isHeld);
+       ShowTimerInfo(IDC_CALLER1_TIME_LABEL, isHeld);
+       if(__pActiveCallTimer != null)
+       {
+               __pActiveCallTimer->Cancel();
+       }
+       SetConfCallStateInProgress(false);
+}
+
+void
+ActiveCallForm::OnConfCallActiveTelephonyCallback(bool isActive)
+{
+       //reset hold status and show call timer
+       ShowTimerInfo(IDC_CALLER1_TIME_LABEL, !isActive, __activeCallStartTime);
+       SetHoldButtonStatus(isActive);
+       SetConfCallStateInProgress(false);
+}
+
 
 void
 ActiveCallForm::UpdateMultipleCallScreen(Tizen::Base::Collection::IListT<AppCallInfo>& activeCallsList)
@@ -2259,3 +2336,24 @@ ActiveCallForm::OnForeground(void)
        AppLogDebug("Enter");
        __pCallPresentor->OnAppForeground();
 }
+
+bool
+ActiveCallForm::OnKeyPressed(Control& source, const KeyEventInfo& keyEventInfo)
+{
+       AppLogDebug("Enter");
+
+       if(keyEventInfo.GetKeyCode() == KEY_BACKSPACE || keyEventInfo.GetKeyCode() == KEY_DELETE)
+       {
+               if(__pDTMFKeypad != null)
+               {
+                       EditField* pTextBox = static_cast<EditField*>(__pDTMFKeypad->GetControl(IDC_TEXTBOX));
+                       if(source.Equals(*pTextBox))
+                       {
+                               AppLogDebug("Enter");
+                               return true;
+                       }
+               }
+       }
+
+       return false;
+}
index 9361bde..8bb1e32 100644 (file)
@@ -126,13 +126,13 @@ BaseForm::HandleCallConnected(IListT<AppCallInfo>& pCallList)
                        {
                                //single Conference call - goto active Conf. call form
                                pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_CONFCALL,
-                                               SCENE_TRANSITION_ANIMATION_TYPE_NONE, SCENE_HISTORY_OPTION_NO_HISTORY,SCENE_DESTROY_OPTION_KEEP), pCallInfoList);
+                                               SCENE_TRANSITION_ANIMATION_TYPE_NONE, SCENE_HISTORY_OPTION_NO_HISTORY,SCENE_DESTROY_OPTION_DESTROY), pCallInfoList);
                        }
                        else
                        {
                                //single active call - goto active call form
                                pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_ACTIVECALL,
-                                               SCENE_TRANSITION_ANIMATION_TYPE_NONE, SCENE_HISTORY_OPTION_NO_HISTORY,SCENE_DESTROY_OPTION_KEEP), pCallInfoList);
+                                               SCENE_TRANSITION_ANIMATION_TYPE_NONE, SCENE_HISTORY_OPTION_NO_HISTORY,SCENE_DESTROY_OPTION_DESTROY), pCallInfoList);
                        }
                }
                else if(noOfCalls == 2)
@@ -188,6 +188,28 @@ BaseForm::HandleCallConnected(IListT<AppCallInfo>& pCallList)
 }
 
 void
+BaseForm::HandleCallActive(bool isActive)
+{
+       AppLogDebug("Enter");
+       ActiveCallForm* pActiveCallForm = dynamic_cast<ActiveCallForm*>(this);
+       if(pActiveCallForm != null)
+       {
+               pActiveCallForm->OnActiveTelephonyCallback(isActive);
+       }
+}
+
+void
+BaseForm::HandleCallHeld(bool isHeld)
+{
+       AppLogDebug("Enter");
+       ActiveCallForm* pActiveCallForm = dynamic_cast<ActiveCallForm*>(this);
+       if(pActiveCallForm != null)
+       {
+               pActiveCallForm->OnHoldTelephonyCallback(isHeld);
+       }
+}
+
+void
 BaseForm::HandleCallDisconnected(bool isLastCall, IListT<AppCallInfo>& pCurrentActiveCallList)
 {
        AppLogDebug("Enter");
@@ -361,6 +383,63 @@ BaseForm::HandleIncomingCall(AppCallInfo& pCallInfo)
 }
 
 void
+BaseForm::HandleConfCallHoldOccured(bool success)
+{
+
+       switch (__formType)
+       {
+       case FORMTYPE_CONFCALLLIST:
+       {
+               ConfCallerListForm* pConfCallerListForm = dynamic_cast<ConfCallerListForm*>(this);
+               if(pConfCallerListForm != null)
+               {
+                       pConfCallerListForm->OnConfCallHoldTelephoneCallBackOccured(success);
+               }
+       }
+       break;
+       case FORMTYPE_ACTIVECONFCALL:
+       {
+               ActiveCallForm* pActiveCallForm = dynamic_cast<ActiveCallForm*>(this);
+               if(pActiveCallForm != null)
+               {
+                       pActiveCallForm->OnConfCallHoldTelephonyCallback(success);
+               }
+       }
+       break;
+       default:
+               break;
+       }
+}
+
+void
+BaseForm::HandleConfCallActiveOccured(bool success)
+{
+       switch (__formType)
+       {
+       case FORMTYPE_CONFCALLLIST:
+       {
+               ConfCallerListForm* pConfCallerListForm = dynamic_cast<ConfCallerListForm*>(this);
+               if(pConfCallerListForm != null)
+               {
+                       pConfCallerListForm->OnConfCallActiveTelephoneCallBackOccured(success);
+               }
+       }
+       break;
+       case FORMTYPE_ACTIVECONFCALL:
+       {
+               ActiveCallForm* pActiveCallForm = dynamic_cast<ActiveCallForm*>(this);
+               if(pActiveCallForm != null)
+               {
+                       pActiveCallForm->OnConfCallActiveTelephonyCallback(success);
+               }
+       }
+       break;
+       default:
+               break;
+       }
+}
+
+void
 BaseForm::HandleCallSwapOccured(IListT<AppCallInfo>& pCallList)
 {
        int noOfCalls = pCallList.GetCount();
index 250b83f..673139f 100644 (file)
@@ -90,6 +90,7 @@ ConfCallerListForm::ConfCallerListForm(void)
        __pConfCallInfo = null;
        __pConfCallTimer = null;
        __isCallSplit = false;
+       __isConfCallStateInProgress = false;
        __pAddressbook = null;
 }
 
@@ -191,24 +192,18 @@ ConfCallerListForm::OnActionPerformed(const Control& source, int actionId)
                }
                bool success = true;
                bool isCallOnHold = __pConfCallInfo->IsOnHold();
-               if (isCallOnHold == false)
+               if(IsConfCallStateInProgress() == 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 tableview
-                       __pList->UpdateTableView();
-                       SetHoldButtonStatus(isCallOnHold);
+                       if (isCallOnHold == false)
+                       {
+                               success = __pCallPresentor->HoldConferenceCall();
+                               SetConfCallStateInProgress(true);
+                       }
+                       else
+                       {
+                               success = __pCallPresentor->ActivateConferenceCall();
+                               SetConfCallStateInProgress(true);
+                       }
                }
        }
        break;
@@ -429,6 +424,54 @@ ConfCallerListForm::HandleParticipantsChanged(void)
        __pList->SetEnabled(true);
 }
 
+
+void
+ConfCallerListForm::OnConfCallHoldTelephoneCallBackOccured(bool success)
+{
+       bool isCallOnHold = __pConfCallInfo->IsOnHold();
+       isCallOnHold = !(isCallOnHold);
+       __pConfCallInfo->SetOnHold(isCallOnHold);
+       __pList->UpdateTableView();
+       SetHoldButtonStatus(isCallOnHold);
+       SetConfCallStateInProgress(false);
+
+}
+
+bool
+ConfCallerListForm::IsConfCallStateInProgress(void)
+{
+       return __isConfCallStateInProgress;
+}
+
+void
+ConfCallerListForm::SetConfCallStateInProgress(bool progress)
+{
+       __isConfCallStateInProgress = progress;
+}
+
+
+void
+ConfCallerListForm::OnConfCallActiveTelephoneCallBackOccured(bool success)
+{
+       bool isCallOnHold = __pConfCallInfo->IsOnHold();
+       isCallOnHold = !(isCallOnHold);
+       __pConfCallInfo->SetOnHold(!success);
+       __pList->UpdateTableView();
+       SetHoldButtonStatus(!success);
+       SetConfCallStateInProgress(false);
+
+}
+
+/*void
+ConfCallerListForm::HandleHoldConferenceCallback(bool success)
+{
+       if(success == true)
+       {
+               __pList->UpdateTableView();
+               SetHoldButtonStatus(success);
+       }
+}*/
+
 void
 ConfCallerListForm::DisableAllControls(void)
 {
index 01dd005..7b0a8d0 100644 (file)
@@ -1610,9 +1610,10 @@ IncomingCallForm::OnForeground(void)
        //This is done so that when in IncomingCallForm and calloptionpopup is shown , now if
        // focus goes away from popup by pressing cancel key from the host keyboard the focus shouldnt get lost
        // but should focus the Reject message button immediately.
-       Button* pButtonRejectMessage = static_cast<Button*>(GetControl(IDC_REJECT_MESSAGE_BUTTON));
-       pButtonRejectMessage->SetFocus();
-       pButtonRejectMessage->Invalidate(true);
+//     Button* pButtonRejectMessage = static_cast<Button*>(GetControl(IDC_REJECT_MESSAGE_BUTTON));
+//Commented for bug N_SE-52277
+       //pButtonRejectMessage->SetFocus();
+       //pButtonRejectMessage->Invalidate(true);
        __pCallPresentor->OnAppForeground();
 }
 
index bd3eb07..717839f 100644 (file)
@@ -650,6 +650,24 @@ CallPresentationModel::HandleCallConnected(Tizen::Base::Collection::IListT<AppCa
 }
 
 void
+CallPresentationModel::HandleCallActive(bool isActive)
+{
+       if (__pTelEventListener != null)
+       {
+               __pTelEventListener->HandleCallActive(isActive);
+       }
+}
+
+void
+CallPresentationModel::HandleCallHeld(bool isHeld)
+{
+       if (__pTelEventListener != null)
+       {
+               __pTelEventListener->HandleCallHeld(isHeld);
+       }
+}
+
+void
 CallPresentationModel::HandleCallDisconnected(bool isLastCall, Tizen::Base::Collection::IListT<AppCallInfo>& pCallList)
 {
        AppLogDebug("Enter");
@@ -701,6 +719,24 @@ CallPresentationModel::HandleIncomingCall(AppCallInfo& pCallInfo)
 }
 
 void
+CallPresentationModel::HandleConfCallHoldOccured(bool success)
+{
+       if (__pTelEventListener != null)
+       {
+               __pTelEventListener->HandleConfCallHoldOccured(success);
+       }
+}
+
+void
+CallPresentationModel::HandleConfCallActiveOccured(bool success)
+{
+       if (__pTelEventListener != null)
+       {
+               __pTelEventListener->HandleConfCallActiveOccured(success);
+       }
+}
+
+void
 CallPresentationModel::HandleCallSwapOccured(Tizen::Base::Collection::IListT<AppCallInfo>& pCallList)
 {
        if (__pTelEventListener != null)
index 1576201..356cf06 100644 (file)
@@ -875,27 +875,16 @@ TelephonyManager::HoldConferenceCall(bool holdCall)
        int res = TAPI_API_INVALID_INPUT;
        if (holdCall == true)
        {
-               res = tel_hold_call(__pTapiHandle, callHandle, &HandleCallbackResponse, this);
+               res = tel_hold_call(__pTapiHandle, callHandle, &HandleHoldConferenceCallbackResponse, this);
        }
        else
        {
-               res = tel_active_call(__pTapiHandle, callHandle, &HandleCallbackResponse, this);
+               res = tel_active_call(__pTapiHandle, callHandle, &HandleActiveConferenceCallbackResponse, this);
        }
-       if (res == TAPI_API_SUCCESS)
+
+       if (res == TAPI_CAUSE_SUCCESS)
        {
                r = E_SUCCESS;
-               if (holdCall == true)
-               {
-                       confCallToHold.SetOnHold(true);
-               }
-               else
-               {
-                       confCallToHold.SetOnHold(false);
-               }
-               AppCallInfo* pConfCallInfo = new (std::nothrow) AppCallInfo();
-               *pConfCallInfo = confCallToHold;
-               __pActiveCallList->Remove(callHandle);
-               __pActiveCallList->Add(callHandle, *pConfCallInfo);
        }
        else
        {
@@ -964,21 +953,11 @@ TelephonyManager::HoldActiveCall(AppCallInfo* pActiveCallInfo, bool holdCall)
        }
        else
        {
-               retStatus = tel_active_call(__pTapiHandle, callHandle, &HandleCallbackResponse, this);
+               retStatus = tel_active_call(__pTapiHandle, callHandle, &HandleActiveCallbackResponse, this);
        }
 
        if (retStatus == TAPI_CAUSE_SUCCESS)
        {
-               AppCallInfo* pHeldCallInfo = new (std::nothrow) AppCallInfo();
-               //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
@@ -1295,12 +1274,156 @@ TelephonyManager::IsSplitAllowed(void)
        return false;
 }
 void
+TelephonyManager::HandleActiveConferenceCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData)
+{
+       TelephonyManager* pTelManager = (TelephonyManager*) pUserData;
+       AppCallInfo confCallToHold;
+       IListT<AppCallInfo>* pCallList = pTelManager->__pActiveCallList->GetValuesN();
+       int confCallCount = pCallList->GetCount();
+
+       for (int index = 0; index < confCallCount; index++)
+       {
+               pCallList->GetAt(index, confCallToHold);
+               if (confCallToHold.IsConferenceCall() == true)
+               {
+                       unsigned int conferenceCallHandleToHold = 0;
+                       memcpy(&conferenceCallHandleToHold, pData, sizeof(TS_UINT));
+                       if (callBackResult == TAPI_API_SUCCESS)
+                       {
+                               confCallToHold.SetOnHold(false);
+                               AppCallInfo* pConfCallInfo = new (std::nothrow) AppCallInfo();
+                               *pConfCallInfo = confCallToHold;
+                               pTelManager->__pActiveCallList->Remove(conferenceCallHandleToHold);
+                               pTelManager->__pActiveCallList->Add(conferenceCallHandleToHold, *pConfCallInfo);
+                               pTelManager->__pEventListener->HandleConfCallActiveOccured(true);
+                       }
+                       break;
+               }
+       }
+
+       if(pCallList != null)
+       {
+               delete pCallList;
+               pCallList = null;
+       }
+}
+void
+TelephonyManager::HandleHoldConferenceCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData)
+{
+       TelephonyManager* pTelManager = (TelephonyManager*) pUserData;
+       AppCallInfo confCallToHold;
+       bool isConferenceCallFound = false;
+       IListT<AppCallInfo>* pCallList = pTelManager->__pActiveCallList->GetValuesN();
+       int confCallCount = pCallList->GetCount();
+
+       for (int index = 0; index < confCallCount; index++)
+       {
+               pCallList->GetAt(index, confCallToHold);
+               if (confCallToHold.IsConferenceCall() == true)
+               {
+                       unsigned int conferenceCallHandleToHold = 0;
+                       memcpy(&conferenceCallHandleToHold, pData, sizeof(TS_UINT));
+                       if (callBackResult == TAPI_API_SUCCESS)
+                       {
+                               confCallToHold.SetOnHold(true);
+                               AppCallInfo* pConfCallInfo = new (std::nothrow) AppCallInfo();
+                               *pConfCallInfo = confCallToHold;
+                               pTelManager->__pActiveCallList->Remove(conferenceCallHandleToHold);
+                               pTelManager->__pActiveCallList->Add(conferenceCallHandleToHold, *pConfCallInfo);
+                               pTelManager->__pEventListener->HandleConfCallHoldOccured(true);
+                       }
+                       break;
+               }
+       }
+       if(pCallList != null)
+       {
+               delete pCallList;
+               pCallList = null;
+       }
+}
+
+
+void
 TelephonyManager::HandleHoldCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData)
 {
        AppLogDebug("%d",callBackResult);
+       result r = E_FAILURE;
        TelephonyManager* pTelManager = (TelephonyManager*) pUserData;
+       if (pData != null && callBackResult == TAPI_API_SUCCESS)
+       {
+               unsigned int heldCallHandle = 0;
+               memcpy(&heldCallHandle, pData, sizeof(TS_UINT));
+
+               if (pTelManager->__pActiveCallList->GetCount())
+               {
+                       IListT<AppCallInfo>* pCallList = pTelManager->__pActiveCallList->GetValuesN();
+                       int callCount = pCallList->GetCount();
+                       for (int index = 0; index < callCount; index++)
+                       {
+                               AppCallInfo holdCallInfo;
+                               r = pCallList->GetAt(index, holdCallInfo);
+                               //check if an active call is found with matching contact no.
+                               if ((r == E_SUCCESS) && (heldCallHandle == (unsigned int) holdCallInfo.GetCallHandle()->ToLong()))
+                               {
+                                       AppCallInfo* pHeldCallInfo = new (std::nothrow) AppCallInfo();
+                                       //copy state into new callinfo object
+                                       *pHeldCallInfo = holdCallInfo;
+                                       //set call to hold state
+                                       pHeldCallInfo->SetOnHold(true);
+                                       //update the state of the call in Active call list by removing and adding again
+                                       pTelManager->__pActiveCallList->Remove(heldCallHandle);
+                                       pTelManager->__pActiveCallList->Add(heldCallHandle, *pHeldCallInfo);
+                                       pTelManager->__pEventListener->HandleCallHeld(true);
+                                       break;
+                               }
+                       }
+                       delete pCallList;
+                       pCallList = null;
+               }
+       }
        pTelManager->CheckPendingDialCalls(callBackResult);
 }
+
+void
+TelephonyManager::HandleActiveCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData)
+{
+       AppLogDebug("%d",callBackResult);
+       result r = E_FAILURE;
+               TelephonyManager* pTelManager = (TelephonyManager*) pUserData;
+               if (pData != null && callBackResult == TAPI_API_SUCCESS)
+               {
+                       unsigned int activeCallHandle = 0;
+                       memcpy(&activeCallHandle, pData, sizeof(TS_UINT));
+
+                       if (pTelManager->__pActiveCallList->GetCount())
+                       {
+                               IListT<AppCallInfo>* pCallList = pTelManager->__pActiveCallList->GetValuesN();
+                               int callCount = pCallList->GetCount();
+                               for (int index = 0; index < callCount; index++)
+                               {
+                                       AppCallInfo ActiveCallInfo;
+                                       r = pCallList->GetAt(index, ActiveCallInfo);
+                                       //check if an active call is found with matching contact no.
+                                       if ((r == E_SUCCESS) && (activeCallHandle == (unsigned int) ActiveCallInfo.GetCallHandle()->ToLong()))
+                                       {
+                                               AppCallInfo* pActiveCallInfo = new (std::nothrow) AppCallInfo();
+                                               //copy state into new callinfo object
+                                               *pActiveCallInfo = ActiveCallInfo;
+                                               //set call to active state
+                                               pActiveCallInfo->SetOnHold(false);
+                                               //update the state of the call in Active call list by removing and adding again
+                                               pTelManager->__pActiveCallList->Remove(activeCallHandle);
+                                               pTelManager->__pActiveCallList->Add(activeCallHandle, *pActiveCallInfo);
+                                               break;
+                                       }
+                               }
+                               delete pCallList;
+                               pCallList = null;
+                               pTelManager->__pEventListener->HandleCallActive(true);
+                       }
+               }
+}
+
 void
 TelephonyManager::HandleCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData)
 {