tizen2.1 code merge
[apps/osp/Call.git] / src / CallApp.cpp
index 540f193..e790d96 100644 (file)
@@ -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_DESTROY), __pLaunchArgs);
                                __pLaunchArgs = null;
                        }
+
+
                }
                else
                {
@@ -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_DESTROY), __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;
@@ -546,12 +580,12 @@ CallApp::SetTopMostWindow(bool bTopMost)
        {
                GetAppFrame()->GetFrame()->SetZOrderGroup(WINDOW_Z_ORDER_GROUP_HIGHEST);
                AppManager::GetInstance()->AddActiveAppEventListener(*this);
-               if(PowerManager::IsScreenOn() == false)
+               /*if(PowerManager::IsScreenOn() == false)
                {
                        AppLogDebug("TurnScreenOn");
                        res = PowerManager::TurnScreenOn();
                        AppLogDebug("TurnScreenOn %d",res);
-               }
+               }*/
 
        }
        else