phoneuis/easydialing/edcontactor/src/edphonecall.cpp
branchRCL_3
changeset 3 8871b09be73b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phoneuis/easydialing/edcontactor/src/edphonecall.cpp	Fri Feb 19 22:50:26 2010 +0200
@@ -0,0 +1,144 @@
+/*
+* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). 
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  Launching Call.
+*
+*/
+
+
+// INCLUDE FILES
+#include "edcontactorheaders.h"
+
+_LIT8( KAiwContentTypeAll, "*" );
+
+/// Unnamed namespace for local definitions
+namespace
+	{
+
+#ifdef _DEBUG
+	enum TPanicCode
+		{
+		EPanicPreCond_ExecuteL = 1,
+		EPanicPreCond_ExecuteL2
+		};
+
+	void Panic(TPanicCode aReason)
+		{
+		_LIT(KPanicText, "CCmsPhoneCall");
+		User::Panic (KPanicText, aReason);
+		}
+#endif // _DEBUG
+
+
+	} /// namespace
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ---------------------------------------------------------
+// CEDPhoneCall::ExecuteL
+// ---------------------------------------------------------
+void CEDPhoneCall::ExecuteL( const TDesC& aPhoneNumber, TEDPhoneCallType aCallType,
+        TBool aForcedCallType, TUint32 aServiceId )
+	{   
+    __ASSERT_DEBUG( NULL != &aPhoneNumber && 0 < aPhoneNumber.Size(), Panic(EPanicPreCond_ExecuteL) );
+
+#ifdef _DEBUG
+	HBufC8* buf = HBufC8::NewLC( aPhoneNumber.Length() );
+	buf->Des().Copy( aPhoneNumber );
+	TPtrC8 numberDesc( buf->Des() );
+	CleanupStack::PopAndDestroy( buf );
+#endif
+
+	//aPhoneNumber will be an xsp id of format "ServiceName:UserId"
+	//here we need to truncate the servicename and pass only the UserId
+	
+    //Find if aPhoneNumber of type "ServiceName:UserId"
+	//if true, then remove the service part
+    TPtrC phoneNum( aPhoneNumber );
+    TInt phoneNumberStart = phoneNum.Locate(':');
+    
+    if ( KErrNotFound != phoneNumberStart )
+        {
+        phoneNumberStart++; //To get rid of ':'
+        phoneNum.Set( phoneNum.Mid( phoneNumberStart ) );
+        }
+    
+    HBufC* numBuf = phoneNum.AllocLC();
+    TPtr numDesc( numBuf->Des() );
+	CommonPhoneParser::ParsePhoneNumber( numDesc,
+			CommonPhoneParser::EPhoneClientNumber ); 
+
+	CAiwDialDataExt* dialDataExt = CAiwDialDataExt::NewLC();
+	dialDataExt->SetPhoneNumberL( *numBuf );
+	switch (aCallType)
+	    {
+	    case ECCACallTypeVoice:
+	        if ( aForcedCallType )
+	            {
+	            // Use this with Action menu's Voice call icon
+	            dialDataExt->SetCallType( CAiwDialData::EAIWForcedCS );
+	            }
+	        else
+	            {
+	            // To be on the safe side, use this with Send key and big Call icon
+	            dialDataExt->SetCallType( CAiwDialData::EAIWVoice );
+	            }
+	        break;
+	    case ECCACallTypeVoIP:
+	        dialDataExt->SetServiceId( aServiceId );
+	        dialDataExt->SetCallType( CAiwDialData::EAIWVoiP );
+	        break;
+	    case ECCACallTypeVideo:
+	        dialDataExt->SetCallType( CAiwDialData::EAIWForcedVideo );
+	        break;
+	    default:
+	        dialDataExt->SetCallType( CAiwDialData::EAIWForcedCS );
+	        break;
+	    }
+
+	dialDataExt->SetWindowGroup( CCoeEnv::Static()->RootWin().Identifier() );
+
+	DoAIWCallL( *dialDataExt );
+
+	CleanupStack::PopAndDestroy( dialDataExt );
+	CleanupStack::PopAndDestroy( numBuf );
+	}
+
+// ---------------------------------------------------------
+// CEDPhoneCall::DoAIWCallL
+// ---------------------------------------------------------
+void CEDPhoneCall::DoAIWCallL( CAiwDialDataExt& aDialData )
+	{
+	RCriteriaArray interest;
+	CleanupClosePushL( interest );
+	CAiwCriteriaItem* criteria = CAiwCriteriaItem::NewLC( KAiwCmdCall,
+			KAiwCmdCall, KAiwContentTypeAll );
+	criteria->SetServiceClass( TUid::Uid(KAiwClassBase) );
+	User::LeaveIfError( interest.Append( criteria ) );
+
+	CAiwServiceHandler* serviceHandler = CAiwServiceHandler::NewLC();
+	serviceHandler->AttachL( interest );
+
+	CAiwGenericParamList& paramList = serviceHandler->InParamListL();
+	aDialData.FillInParamListL( paramList );
+
+	serviceHandler->ExecuteServiceCmdL( KAiwCmdCall, paramList,
+			serviceHandler->OutParamListL(), 0, NULL );
+	serviceHandler->DetachL( interest );
+
+	CleanupStack::PopAndDestroy( serviceHandler );
+	CleanupStack::PopAndDestroy( criteria );
+	CleanupStack::PopAndDestroy( &interest );
+	}
+
+//  End of File