using namespace Tizen::System;
using namespace Tizen::Base::Collection;
using namespace Tizen::Telephony;
+using namespace Tizen::Base::Utility;
const char* callEventList[] = {
TAPI_NOTI_VOICE_CALL_STATUS_IDLE,
TelephonyManager::EndActiveCall(Long callHandle)
{
result r = E_FAILURE;
-
//fetch ended callInfo from active call list
AppCallInfo endCall;
r = __pActiveCallList->GetValue(callHandle.ToLong(), endCall);
{
r = EndCall(endCall);
}
+
return r;
}
AppLog("ENTER");
//This callback comes only if a conference call is ended by user.
TelephonyManager* pTelManager = (TelephonyManager*) pUserData;
+ AppCallInfo heldCall;
if (callBackResult == TAPI_CAUSE_SUCCESS && pData != null)
{
//fetch ended confCall details
//stop sound session
pTelManager->__pSoundManager->StopSession();
//send empty call list to show dialer or call log screen
- pCallList = new (std::nothrow) ArrayListT<AppCallInfo>();
+ pCallList =new (std::nothrow) ArrayListT<AppCallInfo>();
+ pCallList->Construct(1);
+ pCallList->Add(endConfCallInfo);
}
else
{
//fetch active calls to show appropriate scene
pCallList = static_cast<ArrayListT<AppCallInfo>*>(pTelManager->__pActiveCallList->GetValuesN());
+ r = pCallList->GetAt(0, heldCall);
+ if (r == E_SUCCESS)
+ {
+ //pTelManager->HoldActiveCall(&heldCall, false);
+ AppCallInfo* pHeldCallInfo = new (std::nothrow) AppCallInfo();
+ unsigned int callHandle = heldCall.GetCallHandle()->ToLong();
+ //copy state into new callinfo object
+ *pHeldCallInfo = heldCall;
+
+ //set call to hold state
+ pHeldCallInfo->SetOnHold(false);
+
+ pTelManager->__pActiveCallList->Remove(callHandle);
+ //replace old object with new
+ pTelManager->__pActiveCallList->Add(callHandle, *pHeldCallInfo);
+ delete pCallList;
+ pCallList = static_cast<ArrayListT<AppCallInfo>*>(pTelManager->__pActiveCallList->GetValuesN());
+ }
}
//notify listener that call is disconnected.
pTelManager->__pEventListener->HandleCallDisconnected(isLastCall, *pCallList);
//2) an "unconnected" dialed call is ended by caller or other party.
//3) Any normal active calls(NOT conference calls) ended by user or by other party.
- if(__pSoundManager->GetLastConferenceCall() == false)
- {
- __pSoundManager->SetDisconnectTone();
- }
+
TelCallStatusIdleNoti_t idleNotification;
memcpy(&idleNotification, pData, sizeof(TelCallStatusIdleNoti_t));
AppLogDebug("EXIT - no calls exist");
return;
}
-
+ if(__pSoundManager->GetLastConferenceCall() == false)
+ {
+ __pSoundManager->SetDisconnectTone();
+ }
//Check if ended call was among conference caller list,
//then divert event to "HandleParticipantEndedFromConference()"
AppCallInfo confCallInfo;
__pIncomingCall = null;
//update missed status
endCallInfo.SetCalllogType(CALL_LOG_TYPE_VOICE_MISSED_UNSEEN);
+ //save ended call to call log db.
+ //SaveCallInfoToLogsDb(endCallInfo);
}
//save ended call to call log db.
SaveCallInfoToLogsDb(endCallInfo);
__pSoundManager->StopSession();
pCallList = new (std::nothrow) ArrayListT<AppCallInfo>();
pCallList->Construct(1);
- if (isMissedIncomingCallEnded == false)
+ //This is done to show end call form in missed call case also
+ //this was done on request received from HQ to solve a bug in
+ //camera application. In which if a call comes when camera is
+ //running and user disconnects before the ui is shown the camera
+ //application hangs
+ //if (isMissedIncomingCallEnded == false)
{
//save to list to show EndCallForm
pCallList->Add(endCallInfo);
TelephonyManager::HandleEndNormalActiveCall(AppCallInfo& endCallInfo)
{
AppLogDebug("Enter");
+ result r = E_FAILURE;
+ AppCallInfo heldCall;
// This function gets called only from HandleIdleCallback(),
// to handle disconnection of normal active calls.
if (endCallInfo.IsConferenceCall() == false)
}
else
{
- //fetch active calls to show appropriate scene
- pCallList = static_cast<ArrayListT<AppCallInfo>*>(__pActiveCallList->GetValuesN());
+ if(__pIncomingCall == null)
+ {
+ //fetch active calls to show appropriate scene
+ pCallList = static_cast<ArrayListT<AppCallInfo>*>(__pActiveCallList->GetValuesN());
+ //fetch the held call on disconnecting the active call and activate it.
+ r = pCallList->GetAt(0, heldCall);
+ if (r == E_SUCCESS)
+ {
+ HoldActiveCall(&heldCall, false);
+ delete pCallList;
+ pCallList = static_cast<ArrayListT<AppCallInfo>*>(__pActiveCallList->GetValuesN());
+ }
+ }
}
//Save "End" call info to call log database
long long startTime = 0;
SystemTime::GetTicks(startTime);
__pDialedCall->SetCallNotificationTime(startTime);
+ //SaveCallInfoToLogsDb(*__pDialedCall);
}
void
//transfer ownership to Active calls list
__pActiveCallList->Add(connectedCallHandle, *(pConnectedCall));
+/* if (pConnectedCall->GetCalllogType() == CALL_LOG_TYPE_VOICE_INCOMING)
+ {
+ SaveCallInfoToLogsDb(*pConnectedCall);
+ }*/
pConnectedCall = null;
//notify listener that call is connected.
{
r = E_FAILURE;
}
+
+ //Pattern to compare all characters except 0-9 * # P ; , +
+ String phoneNumberPattern(L"[^0-9*#P,p+;]");
+ RegularExpression checkPhoneNumber;
+ checkPhoneNumber.Construct(phoneNumberPattern);
+ //If there is any character other than these listed above then display invalid number
+ bool resultMatch = checkPhoneNumber.Match(contactNumber,false);
+ //return false for patterns other than 0-9 * # P ; , +
+ if(resultMatch == true)
+ {
+ //return phone number is invalid
+ r = E_FAILURE;
+ }
//TODO: check if valid phone number else return error message
return r;
}