X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2FCallApp.cpp;h=4b3de61cd99e730fdfa39654bbc8cbd44afcfbd4;hb=ed3a509fe5ebde6ea068f890f90b01b180ae75af;hp=31f7f52fe6e29028d11d6b147495b2ab509263ed;hpb=6a3ed04a7ca44470fdfeb8f35980f99eab5314b2;p=apps%2Fosp%2FCall.git diff --git a/src/CallApp.cpp b/src/CallApp.cpp index 31f7f52..4b3de61 100644 --- a/src/CallApp.cpp +++ b/src/CallApp.cpp @@ -1,3 +1,18 @@ +// +// Copyright (c) 2012 Samsung Electronics Co., Ltd. +// +// 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 +// +// http://floralicense.org/license/ +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an AS IS BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +// /** * Name : CallApp * Version : @@ -23,6 +38,7 @@ using namespace Tizen::Ui::Scenes; using namespace Tizen::Base::Utility; using namespace Tizen::Base::Collection; using namespace Tizen::Base::Utility; +using namespace Tizen::Shell; CallApp::CallApp(void):__initialSceneId(L""), __pLaunchArgs(null) @@ -314,17 +330,25 @@ CallApp::HandleIncomingCallAppControlRequest(RequestId reqId,const IMap* pArgsMa //Fetch incoming call details CallPresentationModel* pCallPresentor = CallPresentationModel::GetInstance(); + //Check if there is already a dial call present .This can happen in some + //race conditions N_SE-39531 + if(pCallPresentor->IsIncomingorDialingCallPresent()) + { + int incomingHandle; + Integer::Parse(callHandle,incomingHandle); + pCallPresentor->RejectCall(incomingHandle,false,contactNumber); + AppLog("Cancelled already an incoming call present"); + appControlResult = APP_CTRL_RESULT_CANCELED; + AppControlProviderManager::GetInstance()->SendAppControlResult(reqId, appControlResult, null); + return; + } + AppCallInfo* pIncomingCall = pCallPresentor->FetchIncomingCallDetailsN(callHandle, contactNumber); if(pIncomingCall != null) { bool isCallRejected = pCallPresentor->CheckIncomingCallToBeRejected(pIncomingCall); if(isCallRejected == false) { - //Abort any AppControl Request running already to show incoming call screen - if (pCallPresentor->IsAppControlRunning() == true) - { - pCallPresentor->AbortAppControlRequest(); - } //save app launch argument list __pLaunchArgs = new (std::nothrow) ArrayList(SingleObjectDeleter); __pLaunchArgs->Construct(1); @@ -336,9 +360,12 @@ CallApp::HandleIncomingCallAppControlRequest(RequestId reqId,const IMap* pArgsMa else { //App already initialized, goto incoming call form - pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_INCOMINGCALL), __pLaunchArgs); + pSceneManager->GoForward(ForwardSceneTransition(IDSCN_SCENE_INCOMINGCALL, SCENE_TRANSITION_ANIMATION_TYPE_NONE, + SCENE_HISTORY_OPTION_NO_HISTORY, SCENE_DESTROY_OPTION_KEEP), __pLaunchArgs); __pLaunchArgs = null; } + + } else { @@ -414,7 +441,7 @@ CallApp::HandleDialCallAppControlRequest(RequestId reqId,const IMap* pArgsMap,co } delete pKey; //Check if its a valid number - if(CheckNumberIsValid(phoneNumber) == false) + /* if(CheckNumberIsValid(phoneNumber) == false) { //go back to previous scene if App was already running, else exit application. if(__initialSceneId.IsEmpty() == true) @@ -431,7 +458,7 @@ CallApp::HandleDialCallAppControlRequest(RequestId reqId,const IMap* pArgsMap,co //and show current screen, if any calls is present. return; } - } + }*/ //call type pKey = new (std::nothrow) String(PARAM_CALL_TYPE); if(pArgsMap->ContainsKey(*pKey) == true) @@ -461,7 +488,17 @@ CallApp::HandleDialCallAppControlRequest(RequestId reqId,const IMap* pArgsMap,co AppControlProviderManager::GetInstance()->SendAppControlResult(reqId, appControlResult, null); return; } + CallPresentationModel* pCallPresentor = CallPresentationModel::GetInstance(); + //Check if there is already an incoming call + //this can happen in some race conditions N_SE-39531 + if(pCallPresentor->IsIncomingorDialingCallPresent() == true) + { + AppLog("Cancelled already an incoming call present"); + appControlResult = APP_CTRL_RESULT_CANCELED; + AppControlProviderManager::GetInstance()->SendAppControlResult(reqId, appControlResult, null); + return; + } int currentActiveCallCount = pCallPresentor->GetCurrentCallCount(); if(currentActiveCallCount <= 1) { @@ -491,7 +528,8 @@ CallApp::HandleDialCallAppControlRequest(RequestId reqId,const IMap* pArgsMap,co else { AppLog("Outgoing call"); - pSceneManager->GoForward( ForwardSceneTransition( nextScene), __pLaunchArgs); + pSceneManager->GoForward( ForwardSceneTransition( nextScene, SCENE_TRANSITION_ANIMATION_TYPE_NONE, + SCENE_HISTORY_OPTION_NO_HISTORY, SCENE_DESTROY_OPTION_KEEP), __pLaunchArgs); } appControlResult = APP_CTRL_RESULT_SUCCEEDED; } @@ -515,16 +553,12 @@ CallApp::CheckNumberIsValid(String phoneNumber) { //Pattern to compare all characters except 0-9 * # P ; , + String phoneNumberPattern(L"[^0-9*#P,p+;]"); - String phoneNumberEndingWithHash(L"#$"); - RegularExpression checkPhoneNumber,checkHash; + RegularExpression checkPhoneNumber; checkPhoneNumber.Construct(phoneNumberPattern); - checkHash.Construct(phoneNumberEndingWithHash); //If there is any character other than these listed above then display invalid number bool resultMatch = checkPhoneNumber.Match(phoneNumber,false); //return false for patterns other than 0-9 * # P ; , + - bool endsWithHash = checkHash.Match(phoneNumber,false); - //returns false for any numbers that end with Hash - if(resultMatch == true || endsWithHash == true) + if(resultMatch == true) { //return phone number is invalid return false; @@ -538,6 +572,7 @@ void CallApp::SetTopMostWindow(bool bTopMost) { AppLogDebug("bTopMost = %d",bTopMost); + result res = E_FAILURE; //ToDO: Need to see if there is better way to handle //this case @@ -545,6 +580,12 @@ CallApp::SetTopMostWindow(bool bTopMost) { GetAppFrame()->GetFrame()->SetZOrderGroup(WINDOW_Z_ORDER_GROUP_HIGHEST); AppManager::GetInstance()->AddActiveAppEventListener(*this); + /*if(PowerManager::IsScreenOn() == false) + { + AppLogDebug("TurnScreenOn"); + res = PowerManager::TurnScreenOn(); + AppLogDebug("TurnScreenOn %d",res); + }*/ } else @@ -554,25 +595,22 @@ CallApp::SetTopMostWindow(bool bTopMost) AppManager::GetInstance()->RemoveActiveAppEventListener(*this); } + if(LockManager::GetInstance()->IsLocked()) + { + AppLogDebug("Phone Locked"); + LockManager::GetInstance()->Unlock(); + } } void CallApp::OnActiveAppChanged(const String& appId) { - result res = E_FAILURE; AppLogDebug("Enter %ls",appId.GetPointer()); if(GetAppId().Equals(appId) == true) { - if(PowerManager::IsScreenOn() == false) - { - AppLogDebug("TurnScreenOn"); - res = PowerManager::TurnScreenOn(); - AppLogDebug("TurnScreenOn %d",res); - } result res = PowerManager::KeepScreenOnState(true,false); AppLogDebug("KeepScreenOnState %d",res); - } }