X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2FCallEndCallForm.cpp;h=38ae27ea184456934a37aa6492722ef8926a82d9;hb=ed6777cb3536f0e38e2d4df66a2709af740f52ee;hp=1da349ee53a043b31c8e88e0bcb1c981b6d5d60b;hpb=29213e4295ec2684cd073bb20ee45339bc0e9613;p=apps%2Fosp%2FCall.git diff --git a/src/CallEndCallForm.cpp b/src/CallEndCallForm.cpp index 1da349e..38ae27e 100644 --- a/src/CallEndCallForm.cpp +++ b/src/CallEndCallForm.cpp @@ -53,6 +53,10 @@ static const wchar_t* IDC_CALLER1_LABEL = L"IDC_CALLER1_LABEL"; static const wchar_t* IDC_KEY_BG_LABEL = L"IDC_KEY_BG_LABEL"; static const wchar_t* IDC_CALLER1_BIGPHOTO_LABEL = L"IDC_CALLER1_BIGPHOTO_LABEL"; static const wchar_t* IDB_END_CALL_DEFAULT_ICON = L"C01-1_call_default_caller ID_720x720.png"; +static const wchar_t* IDC_VOICECALL_BUTTON = L"IDC_VOICECALL_BUTTON"; +static const wchar_t* IDC_VIDEOCALL_BUTTON = L"IDC_VIDEOCALL_BUTTON"; +static const wchar_t* IDC_ADD_TO_CONTACT_BUTTON = L"IDC_ADD_TO_CONTACT_BUTTON"; +static const wchar_t* IDC_MSG_BUTTON = L"IDC_MSG_BUTTON"; EndCallForm::EndCallForm(void) @@ -64,7 +68,6 @@ EndCallForm::EndCallForm(void) __pSmallPhotoLabel = null; __isMsgAppControlLaunched = false; __isContactAppControlLaunched = false; - __isContactPresent = false; } EndCallForm::~EndCallForm(void) @@ -165,6 +168,11 @@ EndCallForm::OnActionPerformed(const Control& source, int actionId) { case IDA_VOICE_CALL: { + if (__isMsgAppControlLaunched == true) + { + //AppControl already launched. + return; + } //check if EndCallTimer is running, then cancel it if(__pEndCallEventTimer != null) { @@ -181,6 +189,22 @@ EndCallForm::OnActionPerformed(const Control& source, int actionId) bool isSimInitialized = __pCallPresentor->CheckSimInitializationIsCompleted(); if (isSimInitialized) { + //Disable all buttons + Button* pButton = static_cast(GetControl(IDC_VIDEOCALL_BUTTON,true)); + pButton->SetEnabled(false); + pButton->Invalidate(true); + pButton = static_cast(GetControl(IDC_VOICECALL_BUTTON,true)); + pButton->SetEnabled(false); + pButton->Invalidate(true); + pButton = static_cast(GetControl(IDC_ADD_TO_CONTACT_BUTTON,true)); + if(pButton->GetShowState() == true) + { + pButton->SetEnabled(false); + pButton->Invalidate(true); + } + pButton = static_cast(GetControl(IDC_MSG_BUTTON,true)); + pButton->SetEnabled(false); + pButton->Invalidate(true); //Check if dialing an emergency call bool isEmergencyCall = __pCallPresentor->IsEmergencyNumber(*contactTxt, true); if (isEmergencyCall) @@ -212,32 +236,25 @@ EndCallForm::OnActionPerformed(const Control& source, int actionId) return; } //launch message AppControl - __isMsgAppControlLaunched = true; - result r = E_SUCCESS; - HashMap extraData; - extraData.Construct(); - - extraData.Add(new (std::nothrow) String(MESSAGE_TYPE), new (std::nothrow) String(MESSAGE_SMS_TYPE)); - extraData.Add(new (std::nothrow) String(MESSAGE_TO), new (std::nothrow) String(*__pContactNumber)); - - AppControl* pAc = AppManager::FindAppControlN(PROVIDER_ID_MESSAGE, OPERATION_ID_COMPOSE); - if (pAc != null) + __isMsgAppControlLaunched = __pCallPresentor->LaunchComposeMessageAppControl(*__pContactNumber, this); + if (__isMsgAppControlLaunched == true && __pEndCallEventTimer != null) { - r = pAc->Start(null, null, &extraData, this); - if(r != E_SUCCESS) - { - //AppControl request failed, reset flag. - __isMsgAppControlLaunched = false; - } - else if (r == E_SUCCESS && __pEndCallEventTimer != null) + //cancel EndCallTimer, if AppControl request was successful. + __pEndCallEventTimer->Cancel(); + //Disable the call buttons + Button* pButton = static_cast(GetControl(IDC_VIDEOCALL_BUTTON,true)); + pButton->SetEnabled(false); + pButton->Invalidate(true); + pButton = static_cast(GetControl(IDC_VOICECALL_BUTTON,true)); + pButton->SetEnabled(false); + pButton->Invalidate(true); + pButton = static_cast(GetControl(IDC_ADD_TO_CONTACT_BUTTON,true)); + if(pButton->GetShowState() == true) { - //cancel EndCallTimer, if AppControl request was successful. - __pEndCallEventTimer->Cancel(); + pButton->SetEnabled(false); + pButton->Invalidate(true); } - delete pAc; } - - extraData.RemoveAll(true); } break; @@ -250,6 +267,21 @@ EndCallForm::OnActionPerformed(const Control& source, int actionId) return; } HandleAddToContacts(); + Button* pButton = static_cast(GetControl(IDC_VIDEOCALL_BUTTON,true)); + pButton->SetEnabled(false); + pButton->Invalidate(true); + pButton = static_cast(GetControl(IDC_VOICECALL_BUTTON,true)); + pButton->SetEnabled(false); + pButton->Invalidate(true); + pButton = static_cast(GetControl(IDC_ADD_TO_CONTACT_BUTTON,true)); + if(pButton->GetShowState() == true) + { + pButton->SetEnabled(false); + pButton->Invalidate(true); + } + pButton = static_cast(GetControl(IDC_MSG_BUTTON,true)); + pButton->SetEnabled(false); + pButton->Invalidate(true); } break; @@ -262,56 +294,30 @@ void EndCallForm::HandleAddToContacts(void) { AppLogDebug("Enter"); - //Launch Contact AppControl - __isContactAppControlLaunched = true; - Contact* pContact = __pCallPresentor->GetContactN(*__pContactNumber); - AppControl* pAc = null; - result r = E_SUCCESS; - HashMap extraData; - extraData.Construct(); + Contact* pContact = __pCallPresentor->GetContactN(*__pContactNumber); + //Launch Contact AppControl + String requestParameter; if (pContact != null) { - AppLogDebug("View Contact"); //View Contact - String idVal; - idVal.Append(pContact->GetRecordId()); - extraData.Add(new (std::nothrow) String(CONTACTS_VIEW_TYPE), new (std::nothrow) String(CONTACTS_VIEW_TYPE_CONTACT)); - extraData.Add(new (std::nothrow) String(CONTACTS_VIEW_TYPE_CONTACT), new (std::nothrow) String(CONTACTS_VIEW_TYPE_CONTACT)); - extraData.Add(new (std::nothrow) String(CONTACT_KEY_ITEM_ID), new (std::nothrow) String(idVal)); - extraData.Add(new (std::nothrow) String(CONTACTS_ID_KEY), new (std::nothrow) String(idVal)); - extraData.Add(new (std::nothrow) String(CONTACT_KEY_ITEM_TYPE), new (std::nothrow) String(ITEM_TYPE_PERSON)); - pAc = AppManager::FindAppControlN(PROVIDER_ID_CONTACTS, OPERATION_ID_VIEW); - + requestParameter.Append(pContact->GetRecordId()); + __isContactAppControlLaunched = __pCallPresentor->LaunchViewContactAppControl(requestParameter, this); + delete pContact; + pContact = null; } else { - AppLogDebug("Add Contact"); - extraData.Add(new (std::nothrow) String(INPUT_TYPE_PHONE), new (std::nothrow) String(*__pContactNumber)); - extraData.Add(new (std::nothrow) String(CONTACT_KEY_ITEM_TYPE), new (std::nothrow) String(ITEM_TYPE_CONTACT)); - pAc = AppManager::FindAppControlN(PROVIDER_ID_CONTACTS, OPERATION_ID_ADD); - + //Add To Contact + requestParameter.Append(*__pContactNumber); + __isContactAppControlLaunched = __pCallPresentor->LaunchAddContactAppControl(requestParameter, this); } - if (pAc != null) - { - r = pAc->Start(null, null, &extraData, this); - if(r != E_SUCCESS) - { - //AppControl request failed, reset flag. - __isContactAppControlLaunched = false; - } - else if (r == E_SUCCESS && __pEndCallEventTimer != null) - { - //cancel EndCallTimer, if AppControl request was success. - __pEndCallEventTimer->Cancel(); - } - delete pAc; - } - else + + if (__isContactAppControlLaunched == true && __pEndCallEventTimer != null) { - __isContactAppControlLaunched = false; + //cancel EndCallTimer, if AppControl request was success. + __pEndCallEventTimer->Cancel(); } - extraData.RemoveAll(true); } void @@ -347,13 +353,26 @@ EndCallForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& cu ShowPersonDetails(*__pContactNumber, IDC_CALLER1_LABEL, IDC_CALLER1_BIGPHOTO_LABEL,pEndCall); //If call is hidden means contact number is empty, //or if call is from known number(i.e present in contacts db), Then do NOT show "Add to Contact" button. - if (pEndCall->GetContactInfo() != null || pEndCall->GetContactNumber().IsEmpty() == true) + if (pEndCall->GetContactInfo() != null) { - SetContactButtonState(false); + //Check if contact is deleted in mean time. + Contact* pContact = __pCallPresentor->GetContactN(pEndCall->GetContactNumber()); + //before setting check if the contact is deleted + if(pContact != null) + { + ShowViewContactButton(); + delete pContact; + pContact = null; + } + else + { + ShowAddContactButton(); + } } else { - SetContactButtonState(true); + //Show AddToContact + ShowAddContactButton(); } //Check if call is Emergency call or Hidden call, @@ -366,6 +385,20 @@ EndCallForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& cu { __pCallButtonsPanel->SetEndCallPanelState(true); } + + //check if we reached the end call form of an outgoing call then don't show add to contacts + if(pEndCall->GetCalllogType() == CALL_LOG_TYPE_VOICE_OUTGOING) + { + __pCallButtonsPanel->ShowOrHideAddtoContactsButton(false); + } + else if(pEndCall->GetCalllogType() == CALL_LOG_TYPE_VOICE_INCOMING) + { + if(pEndCall->GetContactNumber().IsEmpty() == false) + { + __pCallButtonsPanel->ShowOrHideAddtoContactsButton(true); + } + } + } break; @@ -373,7 +406,8 @@ EndCallForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& cu break; } - if (__pEndCallEventTimer) + //Before starting end call timer check if messaging appcontrol was launched during incoming call + if (__pEndCallEventTimer && __pCallPresentor->IsAppControlRunning() == false) { __pEndCallEventTimer->Start(IDI_APP_END_TIMER); } @@ -384,6 +418,9 @@ EndCallForm::OnSceneActivatedN(const SceneId& previousSceneId, const SceneId& cu delete pArgs; pArgs = null; } + CallApp* pCallApp = static_cast(CallApp::GetInstance()); + pCallApp->SetTopMostWindow(false); + AddOrientationEventListener(*this); } void @@ -405,6 +442,7 @@ EndCallForm::OnSceneDeactivated(const SceneId& currentSceneId, const SceneId& ne //remove itself as listener CallApp* pPhoneApp = static_cast(CallApp::GetInstance()); pPhoneApp->RemoveAppStateChangeListener(*this); + RemoveOrientationEventListener(*this); } result @@ -414,19 +452,17 @@ EndCallForm::OnDraw(void) } void -EndCallForm::SetContactButtonState(bool showState) +EndCallForm::ShowViewContactButton(void) { - __pCallButtonsPanel->SetViewContactButtonStatus(showState); - __isContactPresent = !showState; + __pCallButtonsPanel->ShowViewContactButton(); } -bool -EndCallForm::IsContactPresent(void) +void +EndCallForm::ShowAddContactButton(void) { - return __isContactPresent; + __pCallButtonsPanel->ShowAddContactButton(); } - void EndCallForm::ShowPhoneNumber(const String& phoneNumber, const String& lblName) { @@ -541,7 +577,6 @@ EndCallForm::ShowThumbnailImage(const Bitmap* pPhotoId,const String& photoLabel) delete pBackground; delete pShadow; } - } void @@ -572,10 +607,18 @@ EndCallForm::OnTimerExpired(Tizen::Base::Runtime::Timer& timer) void EndCallForm::OnAppControlCompleteResponseReceived(const AppId& appId, const String& operationId, AppCtrlResult appControlResult, const IMap* pExtraData) { + AppLogDebug("Enter"); if (__isMsgAppControlLaunched == true) { //Message AppControl request completed. __isMsgAppControlLaunched = false; + __pCallPresentor->AppControlRequestCompleted(); + } + if(__isContactAppControlLaunched == true) + { + //notify app control completed + __isContactAppControlLaunched = false; + __pCallPresentor->AppControlRequestCompleted(); } //AppControl completed, goto initial scene if present //else exit. @@ -585,10 +628,8 @@ EndCallForm::OnAppControlCompleteResponseReceived(const AppId& appId, const Stri void EndCallForm::HandleLastCallCompletion(void) { - CallApp* pPhoneApp = (static_cast(UiApp::GetInstance())); pPhoneApp->Terminate(); - } void @@ -599,10 +640,73 @@ EndCallForm::OnForeground(void) //as we do not know if it success or failed. if(__isContactAppControlLaunched == true) { - CallApp* pPhoneApp = (static_cast(UiApp::GetInstance())); - pPhoneApp->Terminate(); + if(__pEndCallEventTimer != null) + { + __pEndCallEventTimer->Start(2000); + } + if (__pContactNumber != null && __pContactNumber->IsEmpty() == false) + { + AppCallInfo* ActiveCallInfo = new (std::nothrow) AppCallInfo(); + ActiveCallInfo->SetContactNumber(*__pContactNumber); + Contact* pContact = __pCallPresentor->GetContactN(*__pContactNumber); + if (pContact != null) + { + ActiveCallInfo->SetContactInfo(*pContact); + } + //before setting check if the contact is deleted + if(pContact != null) + { + + ShowViewContactButton(); + delete pContact; + pContact = null; + } + else + { + ShowAddContactButton(); + } + ShowPersonDetails(*__pContactNumber, IDC_CALLER1_LABEL, IDC_CALLER1_BIGPHOTO_LABEL,ActiveCallInfo); + delete ActiveCallInfo; + } + + //notify app control completed + __isContactAppControlLaunched = false; + __pCallPresentor->AppControlRequestCompleted(); + } + else if (__isMsgAppControlLaunched == true) + { + //Message AppControl request completed. + if(__pEndCallEventTimer != null) + { + __pEndCallEventTimer->Start(2000); + } + __isMsgAppControlLaunched = false; + __pCallPresentor->AppControlRequestCompleted(); } - __isContactAppControlLaunched = false; + else if(__pCallPresentor->IsAppControlRunning() == true) + { + if(__pEndCallEventTimer != null) + { + __pEndCallEventTimer->Start(2000); + } + __pCallPresentor->AppControlRequestCompleted(); + } + //Enable all buttons + Button* pButton = static_cast(GetControl(IDC_VIDEOCALL_BUTTON,true)); + pButton->SetEnabled(true); + pButton->Invalidate(true); + pButton = static_cast(GetControl(IDC_VOICECALL_BUTTON,true)); + pButton->SetEnabled(true); + pButton->Invalidate(true); + pButton = static_cast(GetControl(IDC_ADD_TO_CONTACT_BUTTON,true)); + if(pButton->GetShowState() == true) + { + pButton->SetEnabled(true); + pButton->Invalidate(true); + } + pButton = static_cast(GetControl(IDC_MSG_BUTTON,true)); + pButton->SetEnabled(true); + pButton->Invalidate(true); AppLogDebug("Exit"); } @@ -615,6 +719,7 @@ EndCallForm::OnBackground(void) void EndCallForm::OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::OrientationStatus orientationStatus) { + AppLogDebug("Enter"); if (__pCallButtonsPanel != null) { //update position of call buttons panel @@ -625,7 +730,7 @@ EndCallForm::OnOrientationChanged(const Tizen::Ui::Control& source, Tizen::Ui::O RelativeLayout* pRelativeLayout = dynamic_cast(GetPortraitLayoutN()); if (pRelativeLayout != null) { - pRelativeLayout->SetRelation(*__pCallButtonsPanel, *pKeysBgLbl, RECT_EDGE_RELATION_TOP_TO_TOP); + //pRelativeLayout->SetRelation(*__pCallButtonsPanel, *pKeysBgLbl, RECT_EDGE_RELATION_TOP_TO_TOP); } pRelativeLayout = dynamic_cast(GetLandscapeLayoutN()); if (pRelativeLayout != null)