2 // Copyright (c) 2012 Samsung Electronics Co., Ltd.
4 // Licensed under the Flora License, Version 1.1 (the License);
5 // you may not use this file except in compliance with the License.
6 // You may obtain a copy of the License at
8 // http://floralicense.org/license/
10 // Unless required by applicable law or agreed to in writing, software
11 // distributed under the License is distributed on an AS IS BASIS,
12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 // See the License for the specific language governing permissions and
14 // limitations under the License.
18 * @file CallCallPresentationModel.cpp
19 * @brief Call Presentation model class
25 #include "CallAppControlRequestMgr.h"
26 #include "CallActiveCallForm.h"
28 #include "CallPresentationModel.h"
29 #include "CallSettingsPresentationModel.h"
30 #include "CallConfCallerListForm.h"
31 #include "CallTelephonyManager.h"
32 #include "CallSceneRegister.h"
33 #include "CallTypes.h"
35 using namespace Tizen::Base;
36 using namespace Tizen::Base::Collection;
37 using namespace Tizen::App;
38 using namespace Tizen::Graphics;
39 using namespace Tizen::Media;
40 using namespace Tizen::Social;
41 using namespace Tizen::Ui::Scenes;
42 using namespace Tizen::Telephony;
43 using namespace Tizen::Base::Utility;
44 using namespace Tizen::Messaging;
46 CallPresentationModel* CallPresentationModel::__pInstance = null;
48 CallPresentationModel::CallPresentationModel(void)
50 __pTelephonyMgr = null;
51 __pTelEventListener = null;
52 __pSettingsPresentor = null;
53 __isMessageAppControlRunning = false;
54 __isDialAppControlRunning = false;
55 __pAppControlMgr = null;
56 __pNetworkManager = null;
57 __psimStateManager = null;
60 __isMessageSendInProgress = false;
63 CallPresentationModel::~CallPresentationModel(void)
65 __pTelephonyMgr = null;
66 __pSettingsPresentor = null;
67 __pAppControlMgr =null;
68 if(__pNetworkManager != null)
70 delete __pNetworkManager;
71 __pNetworkManager = null;
73 if(__psimStateManager != null)
75 delete __psimStateManager;
76 __psimStateManager = null;
78 if(__psimInfo != null)
83 if(__pSmsManager != null)
91 CallPresentationModel::CreateInstance(void)
93 __pInstance = new (std::nothrow) CallPresentationModel();
94 result r = __pInstance->Construct();
102 std::atexit(DestroyInstance);
105 CallPresentationModel*
106 CallPresentationModel::GetInstance(void)
108 if (__pInstance == null)
116 CallPresentationModel::DestroyInstance(void)
118 if (__pInstance != null)
126 CallPresentationModel::Construct(void)
128 //Fetch Telephony Manager
129 __pTelephonyMgr = TelephonyManager::GetInstance(this);
130 __pSettingsPresentor = SettingsPresentationModel::GetInstance();
131 __pAppControlMgr = CallAppControlRequestMgr::GetInstance();
132 __pNetworkManager = new (std::nothrow)NetworkManager();
133 __pNetworkManager->Construct(null);
139 CallPresentationModel::SetTelEventListener(ITelephonyEventListener* pTelEventListener)
141 //set form as telephony event listener
142 __pTelEventListener = pTelEventListener;
146 CallPresentationModel::IfNumberEndsWithHash(Tizen::Base::String& phoneNumber)
148 String phoneNumberEndingWithHash(L"#$");
149 RegularExpression checkHash;
150 checkHash.Construct(phoneNumberEndingWithHash);
151 bool endsWithHash = checkHash.Match(phoneNumber,false);
152 if(endsWithHash == true)
160 CallPresentationModel::DialCall(String& contactNumber, bool isEmergency)
162 int errorCode = ERROR_NONE;
163 bool isCallServiceAvailable = false;
164 bool numberEndsWithHash = false;
165 NetworkStatus networkStatus;
167 //Check if Telephony Manager is initialized
168 TryCatch(__pTelephonyMgr != null, (errorCode = ERROR_TAPI_INIT_FAILED), "TAPI initialization failed");
170 //check if phone is in flight mode
171 if(__pSettingsPresentor != null && __pSettingsPresentor->GetFlightModeStatus() == true)
173 __pTelEventListener->HandleTelephonyError(ERROR_FLIGHT_MODE_SET);
176 //Check if dialing a call is possible - Check if sim is available
177 if (IsSimAvailable() == false)
179 __pTelEventListener->HandleTelephonyError(ERROR_CODE_SIM_INITIALIZATION_FAILED);
183 //fetch call service status
184 if(__pNetworkManager != null)
186 r = __pNetworkManager->GetNetworkStatus(networkStatus);
189 isCallServiceAvailable = networkStatus.IsCallServiceAvailable();
194 if (isCallServiceAvailable == false)
196 __pTelEventListener->HandleTelephonyError(ERROR_DIAL_FAILED);
199 // check if GPRS number
200 numberEndsWithHash = IfNumberEndsWithHash(contactNumber);
201 if(numberEndsWithHash == true)
203 __pTelEventListener->HandleTelephonyError(ERROR_USSD_NUMBER);
207 //setup outgoing call
208 errorCode = __pTelephonyMgr->SetupMoCall(contactNumber, isEmergency);
209 TryCatch(errorCode == ERROR_NONE,,"Error occurred while setup MO call");
210 if(__pSettingsPresentor != null)
212 __pSettingsPresentor->SetCallState(CALL_STATE_CALL_VOICE_CONNECTING);
217 __pTelEventListener->HandleTelephonyError(errorCode);
221 CallPresentationModel::EndActiveCall(Long callHandle)
223 if(__pTelephonyMgr != null)
225 __pTelephonyMgr->EndActiveCall(callHandle);
230 CallPresentationModel::EndDialingCall(String& contactNumber)
232 if(__pTelephonyMgr != null)
234 __pTelephonyMgr->EndDialingCall(contactNumber);
239 CallPresentationModel::EndConferenceCall(void)
241 result r = __pTelephonyMgr->EndConferenceCall();
244 //TODO: send proper error code
245 __pTelEventListener->HandleTelephonyError(ERROR_GENERAL);
252 CallPresentationModel::EndAllCall(void)
254 if(__pTelephonyMgr != null)
256 __pTelephonyMgr->EndAllCalls();
260 CallPresentationModel::HoldCall(Tizen::Base::Long callHandle)
262 result r = __pTelephonyMgr->HoldCall(callHandle, true);
263 return (!IsFailed(r));
267 CallPresentationModel::UnHoldCall(Tizen::Base::Long callHandle)
269 result r = __pTelephonyMgr->HoldCall(callHandle, false);
270 return (!IsFailed(r));
274 CallPresentationModel::HoldConferenceCall(void)
276 result r = __pTelephonyMgr->HoldConferenceCall(true);
277 return (!IsFailed(r));
281 CallPresentationModel::ActivateConferenceCall(void)
283 result r = __pTelephonyMgr->HoldConferenceCall(false);
284 return (!IsFailed(r));
288 CallPresentationModel::JoinCall(void)
290 result r = __pTelephonyMgr->JoinCall();
293 __pTelEventListener->HandleTelephonyError(ERROR_JOIN_FAILED);
298 CallPresentationModel::SwapCalls(void)
300 result r = __pTelephonyMgr->SwapCalls();
303 __pTelEventListener->HandleTelephonyError(ERROR_SWAP_FAILED);
308 CallPresentationModel::SetMuteStatus(bool setMute)
310 result r = __pTelephonyMgr->SetMuteStatus(setMute);
311 return (!IsFailed(r));
315 CallPresentationModel::IsCallMuted(void)
317 return __pTelephonyMgr->IsCallMuted();
321 CallPresentationModel::SetSpeakerStatus(bool setSpeaker)
323 result r = __pTelephonyMgr->SetSpeakerStatus(setSpeaker);
324 return (!IsFailed(r));
328 CallPresentationModel::IsSpeakerOn(void)
330 return __pTelephonyMgr->IsSpeakerOn();
333 CallPresentationModel::SendDTMFSignal(String& textToBeSent)
335 __pTelephonyMgr->SendCallDTMF(textToBeSent);
339 CallPresentationModel::GetConferenceCallInfoN(void)
341 return __pTelephonyMgr->GetConferenceCallInfoN();
345 CallPresentationModel::SplitFromConference(SplitConfCallerCmdIds splitCallerCmdId, IListT<AppCallInfo>* pConfCallList)
348 AppCallInfo callToBeSpli;
349 switch (splitCallerCmdId)
351 case IDA_SPLIT_CALLER1:
355 case IDA_SPLIT_CALLER2:
359 case IDA_SPLIT_CALLER3:
363 case IDA_SPLIT_CALLER4:
367 case IDA_SPLIT_CALLER5:
375 result r = pConfCallList->GetAt(callIndex, callToBeSpli);
376 TryCatch(r == E_SUCCESS,,"conf. call list corrupted");
377 //split single call from conference
378 r = __pTelephonyMgr->SplitFromConference(callToBeSpli.GetCallHandle()->ToLong());
379 TryCatch(r == E_SUCCESS,,"Split from conf. call failed");
383 __pTelEventListener->HandleTelephonyError(ERROR_SPLIT_FROM_CONFERENCE_FAILED);
388 CallPresentationModel::EndCallFromConference(EndConfCallerCmdIds endCallerCmdId, IListT<AppCallInfo>* pConfCallList)
391 AppCallInfo callToBeEnded;
392 switch (endCallerCmdId)
394 case IDA_END_CALLER1:
398 case IDA_END_CALLER2:
402 case IDA_END_CALLER3:
406 case IDA_END_CALLER4:
410 case IDA_END_CALLER5:
418 result r = pConfCallList->GetAt(callIndex, callToBeEnded);
419 TryCatch(r == E_SUCCESS,,"conference call list corrupted");
421 r = __pTelephonyMgr->EndFromConference(callToBeEnded.GetCallHandle()->ToLong());
422 TryCatch(r == E_SUCCESS,,"End single call from conference call failed");
427 __pTelEventListener->HandleTelephonyError(ERROR_END_CALL_FAILED);
432 CallPresentationModel::IsSplitAllowed(void)
434 return __pTelephonyMgr->IsSplitAllowed();
438 CallPresentationModel::AcceptIncomingCall(CallAnsweringOptions answerOptions,int callHandle)
440 result r = E_FAILURE;
441 if (answerOptions == ANSERWING_OPTION_ACCEPT_CALL)
443 r = __pTelephonyMgr->AnswerCall(callHandle, true);
447 r = __pTelephonyMgr->AcceptCall(answerOptions,callHandle);
451 __pTelEventListener->HandleTelephonyError(ERROR_GENERAL);
456 CallPresentationModel::GetCallListN(void)
458 return __pTelephonyMgr->GetCallListN();
463 CallPresentationModel::RejectCall(int callHandle, bool sendMsg, const String& contactNumber)
465 AppLogDebug("Enter");
466 if (sendMsg == true && __pAppControlMgr != null)
468 //launch compose message AppControl
469 __isMessageAppControlRunning = __pAppControlMgr->LaunchComposeMessageAppControl(*(const_cast<String*>(&contactNumber)), this);
471 result r = __pTelephonyMgr->AnswerCall(callHandle, false);
474 __pTelEventListener->HandleTelephonyError(ERROR_GENERAL);
483 void CallPresentationModel::OnAppForeground(void)
485 AppLogDebug("Enter %d %d",__isDialAppControlRunning ,__isMessageAppControlRunning);
486 if (__isDialAppControlRunning == true)
488 //This comes here, when Dialer AppControl is finished working.
489 __isDialAppControlRunning = false;
490 __pAppControlMgr->AppControlRequestCompleted();
492 if (__isMessageAppControlRunning == true)
494 //This comes here, when Message AppControl is finished working.
495 __isMessageAppControlRunning = false;
496 __pAppControlMgr->AppControlRequestCompleted();
497 //Check if this was the last call, then terminate application.
498 //And if any calls are active, then those cases are already handled from Other places.
499 if( GetCurrentCallCount() == 0 && IsIncomingorDialingCallPresent() == false)
501 CallApp* pCallApp = static_cast<CallApp*>(UiApp::GetInstance());
502 pCallApp->Terminate();
508 CallPresentationModel::OnAppControlCompleteResponseReceived(const AppId& appId, const String& operationId, AppCtrlResult appControlResult, const IMap* pExtraData)
510 AppLogDebug("Enter");
511 if (__isMessageAppControlRunning == true)
513 //This comes here, when Message AppControl is finished working.
514 __isMessageAppControlRunning = false;
515 __pAppControlMgr->AppControlRequestCompleted();
516 //Check if this was the last call, then terminate application.
517 //And if any calls are active, then those cases are already handled from Other places.
518 if( GetCurrentCallCount() == 0)
520 CallApp* pPhoneApp = static_cast<CallApp*>(UiApp::GetInstance());
521 pPhoneApp->Terminate();
524 if(appId.Equals(PROVIDER_ID_PHONE,false) == true && operationId.Equals(OPERATION_ID_DIAL,false) == true)
526 __isDialAppControlRunning = false;
528 __pAppControlMgr->AppControlRequestCompleted();
529 if(appControlResult == APP_CTRL_RESULT_SUCCEEDED)
531 String* pKey = new (std::nothrow) String(PARAM_PHONE_NUMBER);
532 if (pExtraData->ContainsKey(*pKey) == true)
534 const String* pPhoneNumber = static_cast<const String*>(pExtraData->GetValue(*pKey));
535 if(pPhoneNumber != null && pPhoneNumber->IsEmpty() == false)
537 AddCall(*pPhoneNumber);
548 CallPresentationModel::AddCall(const String& phoneNumber)
550 ArrayList* pLaunchArgs = null;
551 SceneManager* pSceneManager = SceneManager::GetInstance();
552 int currentActiveCallCount = GetCurrentCallCount();
553 if(currentActiveCallCount <= 1 && IsIncomingorDialingCallPresent() == false)
555 //make an outgoing call with given number
556 String* contactTxt = new (std::nothrow) String(phoneNumber);
557 pLaunchArgs = new (std::nothrow) ArrayList(SingleObjectDeleter);
558 pLaunchArgs->Construct();
559 pLaunchArgs->Add(contactTxt);
560 bool isEmergencyCall = IsEmergencyNumber(*contactTxt, true);
562 SceneId nextScene = IDSCN_SCENE_OUTCALL;
565 nextScene = IDSCN_SCENE_OUT_EMERGENCYCALL;
567 pSceneManager->GoForward( ForwardSceneTransition( nextScene,
568 SCENE_TRANSITION_ANIMATION_TYPE_NONE, SCENE_HISTORY_OPTION_NO_HISTORY,SCENE_DESTROY_OPTION_KEEP), pLaunchArgs);
574 CallPresentationModel::GetCurrentCallCount(void)
576 return __pTelephonyMgr->GetCurrentCallCount();
580 CallPresentationModel::CheckSimInitializationIsCompleted()
582 result r = E_FAILURE;
583 if(__pTelephonyMgr != null)
585 r = __pTelephonyMgr->CheckIfMOCallIsPossible();
587 return (!IsFailed(r));
591 CallPresentationModel::IsEmergencyNumber(const Tizen::Base::String& phoneNumber, bool isSimInitialized)
593 return __pTelephonyMgr->CheckIfMOCallIsEmergency(phoneNumber, isSimInitialized);
597 CallPresentationModel::StartAlert(AppCallInfo& incomingCallInfo)
599 //Adding incoming call sate setting here
600 if(__pSettingsPresentor != null)
602 __pSettingsPresentor->SetCallState(CALL_STATE_CALL_VOICE_CONNECTING);
604 __pTelephonyMgr->StartAlert(incomingCallInfo);
608 CallPresentationModel::StopAlert(void)
610 __pTelephonyMgr->StopAlert();
614 CallPresentationModel::GetContactN(const String& phoneNumber)
616 return __pTelephonyMgr->GetContactN(phoneNumber);
620 CallPresentationModel::FetchIncomingCallDetailsN(const String& callHandle, const String& contactNumber)
623 return __pTelephonyMgr->FetchIncomingCallHandleN(callHandle, contactNumber);
627 CallPresentationModel::CheckIncomingCallToBeRejected(AppCallInfo* pIncomingCallInfo)
629 return __pTelephonyMgr->CheckIncomingCallToBeRejected(pIncomingCallInfo);
632 /////////////////////////////////////////////////////////////////
633 ///// Event Listener methods from ITelephonyEventListener /////
634 /////////////////////////////////////////////////////////////////
636 CallPresentationModel::HandleCallConnected(Tizen::Base::Collection::IListT<AppCallInfo>& pCallList)
638 if (__pTelEventListener != null)
640 __pTelEventListener->HandleCallConnected(pCallList);
642 if(__pSettingsPresentor != null)
644 __pSettingsPresentor->SetCallState(CALL_STATE_CALL_VOICE_ACTIVE);
649 CallPresentationModel::HandleCallDisconnected(bool isLastCall, Tizen::Base::Collection::IListT<AppCallInfo>& pCallList)
651 AppLogDebug("Enter");
652 if (isLastCall == true)
654 SetSpeakerStatus(false);
655 SetMuteStatus(false);
656 if(__pSettingsPresentor != null)
658 //Check if there is a incoming call or dialing call present before setting the status
659 if(IsIncomingorDialingCallPresent() == false)
661 __pSettingsPresentor->SetCallState(CALL_STATE_CALL_OFF);
667 if(__pSettingsPresentor != null)
669 __pSettingsPresentor->SetCallState(CALL_STATE_CALL_VOICE_ACTIVE);
672 //1) Defer from sending call disconnected event to form, in case Msg AppControl is running,
673 //to avoid PhoneApp from going to EndCall form, where it shows for 3 sec. and automatically closes.
674 //2) Do not send call disconnected event to any form, in case an incoming call or dialing call is present.
675 if (__pTelEventListener != null /*&& __isMessageAppControlRunning == false*/ )
677 __pTelEventListener->HandleCallDisconnected(isLastCall, pCallList);
682 CallPresentationModel::HandleConferenceCall(AppCallInfo& pCallInfo)
684 if (__pTelEventListener != null)
686 __pTelEventListener->HandleConferenceCall(pCallInfo);
691 CallPresentationModel::HandleIncomingCall(AppCallInfo& pCallInfo)
693 AppLogDebug("Error - This will never come here. Since, now we are getting incoming call event through AppControl!!");
697 CallPresentationModel::HandleCallSwapOccured(Tizen::Base::Collection::IListT<AppCallInfo>& pCallList)
699 if (__pTelEventListener != null)
701 __pTelEventListener->HandleCallSwapOccured(pCallList);
706 CallPresentationModel::HandleConferenceChange(void)
708 //1) Do not send conf. call changed event to any form, in case an incoming call or dialing call is present.
709 if (__pTelEventListener != null)
711 __pTelEventListener->HandleConferenceChange();
716 CallPresentationModel::HandleTelephonyError(int errorCode)
718 if (__pTelEventListener != null)
720 __pTelEventListener->HandleTelephonyError(errorCode);
725 CallPresentationModel::LaunchDialAppControl()
728 if(__isDialAppControlRunning == true)
730 AppLogDebug("__isDialAppControlRunning == true");
731 //Do not allow another app control if already running
735 //Launch dialer AppControl
736 if (__pAppControlMgr != null)
738 __isDialAppControlRunning = __pAppControlMgr->LaunchDialerAppControl(this);
744 CallPresentationModel::IsEnableJoinCallButton(void)
746 //Check if conf. call has maximum participants
747 AppCallInfo* pConfCallInfo = GetConferenceCallInfoN();
748 if(pConfCallInfo != null && pConfCallInfo->GetCallerListCount() >= IDI_MAX_CONF_CALL_PARTICIPANTS)
753 //check if either of the caller is same or present in conf call.
754 IListT<AppCallInfo>* pActiveCallList = GetCallListN();
755 if ( pActiveCallList != null && pActiveCallList->GetCount() == IDI_MAX_ACTIVE_CALLS)
757 AppCallInfo firstCall;
758 AppCallInfo secondCall;
759 pActiveCallList->GetAt(0, firstCall);
760 pActiveCallList->GetAt(1, secondCall);
762 if (firstCall.IsConferenceCall() == true)
764 IListT<AppCallInfo>* pConfMemberList = firstCall.GetCallerList();
765 for (int index = 0; index < pConfMemberList->GetCount(); index++)
767 AppCallInfo singleConfMember;
768 pConfMemberList->GetAt(index, singleConfMember);
769 if (secondCall.GetContactNumber().IsEmpty() == false && secondCall.GetContactNumber().Equals(singleConfMember.GetContactNumber()) == true)
775 else if (secondCall.IsConferenceCall() == true)
777 IListT<AppCallInfo>* pConfMemberList = secondCall.GetCallerList();
778 for (int index = 0; index < pConfMemberList->GetCount(); index++)
780 AppCallInfo singleConfMember;
781 pConfMemberList->GetAt(index, singleConfMember);
782 if (firstCall.GetContactNumber().IsEmpty() == false && firstCall.GetContactNumber().Equals(singleConfMember.GetContactNumber()) == true)
790 //Now, we definitely know that both are single active calls.
791 if (firstCall.GetContactNumber().IsEmpty() == false && firstCall.GetContactNumber().Equals(secondCall.GetContactNumber()) == true)
797 delete pConfCallInfo;
798 pConfCallInfo = null;
803 CallPresentationModel::IsIncomingorDialingCallPresent(void)
805 //returns false, if incoming call or dialed call is present.
806 return __pTelephonyMgr->IsIncomingorDialingCallPresent();
810 CallPresentationModel::LaunchComposeMessageAppControl(String& contactNumber, IAppControlResponseListener* pListener)
812 if (__pAppControlMgr != null)
814 return __pAppControlMgr->LaunchComposeMessageAppControl(contactNumber, pListener);
820 CallPresentationModel::LaunchViewContactAppControl(String& contactId, IAppControlResponseListener* pListener)
822 if (__pAppControlMgr != null)
824 return __pAppControlMgr->LaunchViewContactAppControl(contactId, pListener);
830 CallPresentationModel::LaunchAddContactAppControl(Tizen::Base::String& contactNumber, Tizen::App::IAppControlResponseListener* pListener)
832 if (__pAppControlMgr != null)
834 return __pAppControlMgr->LaunchAddContactAppControl(contactNumber, pListener);
840 CallPresentationModel::IsAppControlRunning(void)
842 if (__pAppControlMgr != null)
844 return __pAppControlMgr->IsAppControlRunning();
850 CallPresentationModel::AbortAppControlRequest(void)
852 if (__pAppControlMgr != null)
854 __pAppControlMgr->AbortAppControlRequest();
859 CallPresentationModel::AppControlRequestCompleted(void)
861 if (__pAppControlMgr != null)
863 __pAppControlMgr->AppControlRequestCompleted();
868 CallPresentationModel::GetSimInfo(void)
870 __psimStateManager = new (std::nothrow)SimStateManager();
871 result r = __psimStateManager->Construct();
874 delete __psimStateManager;
875 __psimStateManager = null;
878 __psimStateManager->SetSimEventListener(this);
880 __psimInfo = new (std::nothrow)SimInfo();
881 r = __psimStateManager->GetSimInfo(*__psimInfo);
884 delete __psimStateManager;
885 __psimStateManager = null;
894 CallPresentationModel::OnTelephonyNetworkStatusChanged(const NetworkStatus& networkStatus)
900 CallPresentationModel::OnTelephonySimStateChanged(Tizen::Telephony::SimState state)
902 if(__psimStateManager != null)
904 delete __psimStateManager;
905 __psimStateManager =null;
907 if(__psimInfo != null)
913 __psimStateManager = new SimStateManager();
914 result r = __psimStateManager->Construct();
917 delete __psimStateManager;
918 __psimStateManager = null;
922 __psimInfo = new SimInfo();
923 r = __psimStateManager->GetSimInfo(*__psimInfo);
926 delete __psimStateManager;
927 __psimStateManager = null;
936 CallPresentationModel::IsSimAvailable(void)
938 if(__psimInfo != null)
940 return __psimInfo->IsAvailable();
951 CallPresentationModel::SendMessage(String& strMsg,String& recpientNum)
953 AppLogDebug("Enter");
955 if(__pSmsManager == null)
957 __pSmsManager = new (std::nothrow) SmsManager();
958 result r = __pSmsManager->Construct(*this);
959 if (IsFailed(r) == true)
961 delete __pSmsManager;
962 __pSmsManager = null;
967 RecipientList recipient;
968 recipient.Add(RECIPIENT_TYPE_TO,recpientNum);
969 SmsMessage smsMessage;
970 r = smsMessage.SetText(strMsg);
971 if (IsFailed(r) == false)
973 r = __pSmsManager->Send(smsMessage,recipient,true);
974 if (IsFailed(r) == false)
976 __isMessageSendInProgress = true;
984 CallPresentationModel::IsMessageSendingInProgress(void)
986 AppLogDebug("Enter %d",__isMessageSendInProgress);
987 return __isMessageSendInProgress;
991 CallPresentationModel::OnSmsMessageSent(result r)
993 AppLogDebug("Enter");
994 __isMessageSendInProgress = false;