//
// Copyright (c) 2012 Samsung Electronics Co., Ltd.
//
-// Licensed under the Flora License, Version 1.0 (the License);
+// Licensed under the Flora License, Version 1.1 (the License);
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
result
TelephonyManager::AnswerAutoRejectCall(int callHandle)
{
+ //Incoming call automatically blocked is handled here.
AppLogDebug("Enter ");
result r = E_FAILURE;
- TelCallAnswerType_t answerType = TAPI_CALL_ANSWER_ACCEPT;
+ TelCallAnswerType_t answerType = TAPI_CALL_ANSWER_REJECT;
int res = -1;
AppLogDebug("tel_answer_call");
- answerType = TAPI_CALL_ANSWER_REJECT;
+ //save to logs db.
AppCallInfo rejectedCallInfo;
rejectedCallInfo = *(__pIncomingCall);
rejectedCallInfo.SetCalllogType(CALL_LOG_TYPE_VOICE_BLOCKED);
SaveCallInfoToLogsDb(rejectedCallInfo);
delete __pIncomingCall;
__pIncomingCall = null;
+
// redirect to reject call back handler as the flow has to be handled
res = tel_answer_call(__pTapiHandle, callHandle, answerType, &HandleCallbackResponse, this);
//Call connected successfully
r = E_SUCCESS;
//Add calls information to call log before deleting from active call list.
- IListT<AppCallInfo>* pCallList = pEndCallsList->GetValuesN();
+ /*IListT<AppCallInfo>* pCallList = pEndCallsList->GetValuesN();
if(pCallList != null)
{
AppCallInfo endCallInfo;
SaveCallInfoToLogsDb(endCallInfo);
}
delete pCallList;
- }
+ }*/
pEndCallsList->RemoveAll();
delete pEndCallsList;
}
//Incoming Call connected successfully
r = E_SUCCESS;
//save to ended call to call logs db.
- SaveCallInfoToLogsDb(callToBeEnded);
+ //SaveCallInfoToLogsDb(callToBeEnded);
}
break;
break;
}
//"Held" call successfully ended - Add call ended to call log database
- SaveCallInfoToLogsDb(callToBeEnded);
+ //SaveCallInfoToLogsDb(callToBeEnded);
//accept incoming call by Holding "Active" call using "TAPI_CALL_ANSWER_HOLD_AND_ACCEPT".
res = tel_answer_call(__pTapiHandle, incomingCallHandle, TAPI_CALL_ANSWER_HOLD_AND_ACCEPT, &HandleCallbackResponse, this);
IListT<AppCallInfo>* pCallList = pEndCallsList->GetValuesN();
if(pCallList != null)
{
- int callCount = pCallList->GetCount();
+/* int callCount = pCallList->GetCount();
for (int index = 0; index < callCount; index++)
{
AppCallInfo endCallInfo;
{
SaveCallInfoToLogsDb(endCallInfo);
}
- }
+ }*/
delete pCallList;
pCallList = null;
}
delete pTelManager->__pDialedCall;
pTelManager->__pDialedCall = null;
}
+
+ //Check if there are no active connected calls and no incoming call.
+ if (pTelManager->__pIncomingCall != null)
+ {
+ pTelManager->__pSettingsManager->SetCallState(CALL_STATE_CALL_VOICE_CONNECTING);
+ }
+ else if (pTelManager->GetCurrentCallCount() >= 1)
+ {
+ pTelManager->__pSettingsManager->SetCallState(CALL_STATE_CALL_VOICE_ACTIVE);
+ }
+ else
+ {
+ pTelManager->__pSettingsManager->SetCallState(CALL_STATE_CALL_OFF);
+ }
+
pTelManager->__pEventListener->HandleTelephonyError(ERROR_DIAL_FAILED);
}
}
TelephonyManager::HandleRejectCallbackResponse(TapiHandle* pHandle, int callBackResult, void* pData, void* pUserData)
{
AppLogDebug("ENTER");
- // This callback comes only if user has either rejected an incoming call from IncomingCallForm.
- // or the incoming call was automatically blocked.
+ // This callback comes only if user has rejected an incoming call from IncomingCallForm.
TelephonyManager* pTelManager = (TelephonyManager*) pUserData;
if (pData != null && callBackResult == TAPI_API_SUCCESS)
{
//Check if incoming call is rejected
if (pTelManager->__pIncomingCall != null && (rejectedCallHandle == (unsigned int) pTelManager->__pIncomingCall->GetCallHandle()->ToLong()))
{
+ AppLogDebug("Call rejected by user");
AppCallInfo rejectedCallInfo;
rejectedCallInfo = *(pTelManager->__pIncomingCall);
delete pTelManager->__pIncomingCall;
pTelManager->__pIncomingCall = null;
- //Check if number was automatically rejected using settings, then don't give any notification to user.
- bool showIncomingCallRejectedNotification = true;
- if (((pTelManager->__pSettingsManager->GetUnknownRejectStatus() == true) && (rejectedCallInfo.GetContactInfo() == null))
- || (pTelManager->__pSettingsManager->IsCallToBeRejected(rejectedCallInfo.GetContactNumber()) == true))
- {
- //blocked
- AppLogDebug("Call blocked");
- showIncomingCallRejectedNotification = false;
- rejectedCallInfo.SetCalllogType(CALL_LOG_TYPE_VOICE_BLOCKED);
- }
- else
- {
- AppLogDebug("Call rejected");
- //rejected by user from incoming call form
- showIncomingCallRejectedNotification = true;
- rejectedCallInfo.SetCalllogType(CALL_LOG_TYPE_VOICE_REJECTED);
- }
+ //rejected by user from incoming call form
+ rejectedCallInfo.SetCalllogType(CALL_LOG_TYPE_VOICE_REJECTED);
//Save rejected incoming call to call log db.
pTelManager->SaveCallInfoToLogsDb(rejectedCallInfo);
- if (showIncomingCallRejectedNotification == true)
+ //check if the ended call was the last call
+ bool isLastCall = (pTelManager->__pActiveCallList->GetCount() == 0);
+ //Stop alert - started only for incoming calls which are not blocked.
+ if(pTelManager->__pSoundManager != null)
{
- //check if the ended call was the last call
- bool isLastCall = (pTelManager->__pActiveCallList->GetCount() == 0);
- //Stop alert - started only for incoming calls which are not blocked.
- if(pTelManager->__pSoundManager != null)
- {
- pTelManager->__pSoundManager->StopAlert();
- //Do not call stop session if there is already a call going on
- if(isLastCall == true)
- {
- pTelManager->__pSoundManager->StopSession();
- }
- }
- //Send notification to user
- ArrayListT<AppCallInfo>* pCallList = null;
- if (isLastCall)
+ pTelManager->__pSoundManager->StopAlert();
+ //Do not call stop session if there is already a call going on
+ if(isLastCall == true)
{
- //save 'RejectedCall' to list to show on EndCallForm
- pCallList = new (std::nothrow) ArrayListT<AppCallInfo>();
- pCallList->Construct(1);
- AppCallInfo* pRejectedCall = new (std::nothrow) AppCallInfo();
- *pRejectedCall = rejectedCallInfo;
- pCallList->Add(*pRejectedCall);
+ pTelManager->__pSoundManager->StopSession();
}
- else
- {
- //fetch active calls to show appropriate scene
- pCallList = static_cast<ArrayListT<AppCallInfo>*>(pTelManager->__pActiveCallList->GetValuesN());
- }
- pTelManager->__pEventListener->HandleCallDisconnected(isLastCall, *pCallList);
- delete pCallList;
- pCallList = null;
}
+ //Send notification to user
+ ArrayListT<AppCallInfo>* pCallList = null;
+ if (isLastCall)
+ {
+ //save 'RejectedCall' to list to show on EndCallForm
+ pCallList = new (std::nothrow) ArrayListT<AppCallInfo>();
+ pCallList->Construct(1);
+ AppCallInfo* pRejectedCall = new (std::nothrow) AppCallInfo();
+ *pRejectedCall = rejectedCallInfo;
+ pCallList->Add(*pRejectedCall);
+ }
+ else
+ {
+ //fetch active calls to show appropriate scene
+ pCallList = static_cast<ArrayListT<AppCallInfo>*>(pTelManager->__pActiveCallList->GetValuesN());
+ }
+ pTelManager->__pEventListener->HandleCallDisconnected(isLastCall, *pCallList);
+ delete pCallList;
+ pCallList = null;
}
}
else
conferenceCall.RemoveCallFromCallerList(index);
//update its status to individual call before saving to database
callToBeEnded.SetConference(false);
- SaveCallInfoToLogsDb(callToBeEnded);
+ // SaveCallInfoToLogsDb(callToBeEnded);
isParticipantCallEnded = true;
break;
}
//remove the conference call handle from active call list to avoid any processing in HandleIdleCallback().
pTelManager->__pActiveCallList->Remove(endConfCallInfo.GetCallHandle()->ToLong());
//Save "End" Conf. call info to call log database
- pTelManager->SaveCallInfoToLogsDb(endConfCallInfo);
+ // pTelManager->SaveCallInfoToLogsDb(endConfCallInfo);
//check if the ended call was the last call and show notification to user
bool isLastCall = (pTelManager->__pActiveCallList->GetCount() == 0);
//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
{
//This callback comes when any type of calls are ended
//We do NOT handle below scenarios here -
//1) In incoming call scenarios, if we end any active calls - handled in "AcceptCall()".
- //2) Incoming call automatically blocked and rejection by user scenarios are handled in "HandleRejectCallbackResponse()".
+ //2) Incoming call automatically blocked is handled in "AnswerAutoRejectCall()" and rejection by user scenarios are handled in "HandleRejectCallbackResponse()".
//3) End conference call is handled in "HandleEndConferenceCallbackResponse()".
//4) End Single Call from Conference call by user is handled in "HandleEndFromConferenceCallbackResponse()".
//5) End Single Call from Conference call using eventInjector is diverted to "HandleParticipantEndedFromConference()".
//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);
+ /*//save ended call to call log db.
+ SaveCallInfoToLogsDb(endCallInfo);*/
//notify listener that call is disconnected.
if (isLastCall == true)
__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);
}
//Save "End" call info to call log database
- SaveCallInfoToLogsDb(endCallInfo);
+ //SaveCallInfoToLogsDb(endCallInfo);
//notify listener that call is disconnected.
__pEventListener->HandleCallDisconnected(isLastCall, *pCallList);
delete pCallList;
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.
contactNumber.Append(pIncomingCallInfo->GetContactNumber());
//Check if "reject unknown calls" is set and contact number is not present in AddressBook
//or if contact number is blacklisted
- if (((__pSettingsManager->GetUnknownRejectStatus() == true) && (pIncomingCallInfo->GetContactInfo() == null))
- || (__pSettingsManager->IsCallToBeRejected(contactNumber) == true))
+ if(__pSettingsManager != null)
{
- AnswerAutoRejectCall(callHandle);
- return true;
+ if (((__pSettingsManager->GetUnknownRejectStatus() == true) && (pIncomingCallInfo->GetContactInfo() == null))
+ || (__pSettingsManager->IsCallToBeRejected(contactNumber) == true))
+ {
+ AnswerAutoRejectCall(callHandle);
+ return true;
+ }
}
return false;
}
{
//fetch custom ringtone for contact
result r = foundContact->GetValue(CONTACT_PROPERTY_ID_RINGTONE, contactRingTone);
+ //Now check if there is a group ring tone
+ if(contactRingTone.IsEmpty() == true)
+ {
+ IList* pCategoryList = __pAddressBook->GetCategoriesByContactN(foundContact->GetRecordId());
+ if(pCategoryList != null && pCategoryList->GetCount() > 0)
+ {
+ Category* pCategory = static_cast<Category*>(pCategoryList->GetAt(0));
+ contactRingTone = pCategory->GetRingtonePath();
+ }
+ }
AppLog("ringtone fetched - r = %d", r);
delete foundContact;
foundContact = null;