diff -r 000000000000 -r ff3b6d0fd310 convergedcallengine/serviceselector/src/cssservicehandlervoice.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/convergedcallengine/serviceselector/src/cssservicehandlervoice.cpp Tue Feb 02 01:11:09 2010 +0200 @@ -0,0 +1,153 @@ +/* +* Copyright (c) 2008 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: This module contains the implementation of +* : CSsServiceHandlerVoice class +* +*/ + + +// INCLUDE FILES +#include "cssservicehandlervoice.h" +#include "cssconnectionhandler.h" +#include "cssserviceutilities.h" +#include "csslogger.h" +#include + +// CONSTANTS +// CS service id. +const TInt KGSMServiceId = 1; + +// ================= MEMBER FUNCTIONS ======================================= + +// ----------------------------------------------------------------------------- +// CSsServiceHandlerVoice::CSsServiceHandlerVoice +// C++ constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CSsServiceHandlerVoice::CSsServiceHandlerVoice + ( + // None. + ) + { + } + +// ----------------------------------------------------------------------------- +// CSsServiceHandlerVoice::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CSsServiceHandlerVoice::ConstructL() + { + iVoipUtils = CSPSettingsVoIPUtils::NewL(); + } + +// ----------------------------------------------------------------------------- +// CSsServiceHandlerVoice::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CSsServiceHandlerVoice* CSsServiceHandlerVoice::NewL + ( + // None. + ) + { + CSsServiceHandlerVoice* self = new ( ELeave ) CSsServiceHandlerVoice(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// Destructor +CSsServiceHandlerVoice::~CSsServiceHandlerVoice + ( + // None. + ) + { + delete iVoipUtils; + } + +// ----------------------------------------------------------------------------- +// CSsServiceHandlerVoice::ExecuteServiceSelectionL +// Gets the calling service by current call type and service id. +// ----------------------------------------------------------------------------- +// +void CSsServiceHandlerVoice::ExecuteServiceSelectionL + ( + CConvergedServiceSelector::TSsResult& aResult, + CConvergedServiceSelector::TSsCallType aCallType, + TUint /*aServiceId*/, + TBool /*aSendKey*/, + const TDesC& /*aString*/ + ) + { + CSSLOGSTRING("CSSelector::ExecuteVoice"); + + TUint prefService(0); + + if ( iVoipUtils->IsPreferredTelephonyVoIP() && + KErrNone == iVoipUtils->GetPreferredService( prefService ) && + IsServiceRegistered( prefService ) ) + { + CSSLOGSTRING("CSSelector::VoipAsPreferred"); + + // Preferred telephony value as voip and preferred (voip) service + // registered -> Change call type as voip and set correct service id. + SsServiceUtilities::SetServiceResult( aResult, + CConvergedServiceSelector::ESsVoipCall, + prefService, + ETrue ); + } + else + { + // Set (CS)voice call parameters + // CallType, Service id and GSM service is always "enabled" + SsServiceUtilities::SetServiceResult( aResult, + aCallType, + KGSMServiceId, + ETrue ); + } + + } + +// ----------------------------------------------------------------------------- +// CSsServiceHandlerVoice::IsServiceRegistered +// Checks is the service registered +// ----------------------------------------------------------------------------- +// +TBool CSsServiceHandlerVoice::IsServiceRegistered + ( + TUint aServiceId + ) const + { + TBool ret( EFalse ); + CSsConnectionHandler* connection = NULL; + + // Nothing to do if CCH client construction not succeed. + // So ignore the leave and cs call will be made. + TRAP_IGNORE( connection = CSsConnectionHandler::NewL() ); + + if ( connection ) + { + ret = connection->IsVoipServiceRegistered( aServiceId ); + delete connection; + } + + return ret; + } + +// ================= OTHER EXPORTED FUNCTIONS =============================== + +// End of File