diff -r 000000000000 -r ff3b6d0fd310 convergedcallengine/spsettings/src/spsettingsvoiputils.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/convergedcallengine/spsettings/src/spsettingsvoiputils.cpp Tue Feb 02 01:11:09 2010 +0200 @@ -0,0 +1,286 @@ +/* +* Copyright (c) 2007 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: Service Provider Settings API, VoIP utilities +* implementation file. +* +*/ + + +#include "spsettingsvoiputils.h" + +#include "spsettingsengine.h" +#include "spproperty.h" +#include "spdefinitions.h" +#include "spdefaultvalues.h" + +#include +#include +#include + +#include "spsapilogger.h" // For logging + +// Preferred Telephony value is PS call +const TInt KRCSEInternetCallPreferred = 1; + +// Dynamic VoIP off +const TInt KVoIPOFF = 0; + + +// ======== MEMBER FUNCTIONS ======== + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +CSPSettingsVoIPUtils::CSPSettingsVoIPUtils() + { + } + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +void CSPSettingsVoIPUtils::ConstructL() + { + XSPSLOGSTRING( "CSPSettingsVoIPUtils::ConstructL() - IN" ); + iSettingsEngine = CSPSettingsEngine::NewL(); + XSPSLOGSTRING( "CSPSettingsVoIPUtils::ConstructL() - OUT" ); + } + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CSPSettingsVoIPUtils* CSPSettingsVoIPUtils::NewL() + { + CSPSettingsVoIPUtils* self = CSPSettingsVoIPUtils::NewLC(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Constructor +// --------------------------------------------------------------------------- +// +EXPORT_C CSPSettingsVoIPUtils* CSPSettingsVoIPUtils::NewLC() + { + CSPSettingsVoIPUtils* self = new( ELeave ) CSPSettingsVoIPUtils; + CleanupStack::PushL( self ); + self->ConstructL(); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +EXPORT_C CSPSettingsVoIPUtils::~CSPSettingsVoIPUtils() + { + XSPSLOGSTRING( + "CSPSettingsVoIPUtils::~CSPSettingsVoIPUtils() - IN" ); + delete iSettingsEngine; + XSPSLOGSTRING( + "CSPSettingsVoIPUtils::~CSPSettingsVoIPUtils() - OUT" ); + } + +// --------------------------------------------------------------------------- +// VoIPProfilesExistL - API method +// Returns ETrue if VoIP sub service plugin ID have been set for some service. +// --------------------------------------------------------------------------- +// +EXPORT_C TBool CSPSettingsVoIPUtils::VoIPProfilesExistL() const + { + XSPSLOGSTRING( + "CSPSettingsVoIPUtils::VoIPProfilesExistL() - IN" ); + + TBool profileExists( EFalse ); + + // Get all service IDs + RArray services; + CleanupClosePushL( services ); + iSettingsEngine->FindServiceIdsL( services ); + const TInt count( services.Count() ); + + // Check if some service has VoIP sub service plug-in ID + TInt err( 0 ); + CSPProperty* property = CSPProperty::NewLC(); + for( TInt i = 0; i < count && !profileExists; ++i ) + { + TServiceId id = services[ i ]; + if( id == KSPDefaultVoIPServiceId ) + { + continue; + } + + err = iSettingsEngine->FindPropertyL( id, + EPropertyVoIPSubServicePluginId, + *property ); + + profileExists = ( KErrNone == err ? ETrue : EFalse ); + } + + CleanupStack::PopAndDestroy( property ); + CleanupStack::PopAndDestroy( &services ); + + + XSPSLOGSTRING( + "CSPSettingsVoIPUtils::VoIPProfilesExistL() - OUT" ); + return profileExists; + } + +// --------------------------------------------------------------------------- +// IsVoIPSupported - API method +// Returns ETrue if following items are ON: +// Common Voip (Feature Manager) +// Dynamic VoIP (Telephony settings) +// --------------------------------------------------------------------------- +// +EXPORT_C TBool CSPSettingsVoIPUtils::IsVoIPSupported( ) const + { + XSPSLOGSTRING( "CSPSettingsVoIPUtils::IsVoIPSupported( ) - IN" ); + + TBool voipSupport( EFalse ); + TRAPD( err, voipSupport = IsVoIPSupportedL() ); + + if ( err != KErrNone ) + { + voipSupport = EFalse; + } + + XSPSLOGSTRING( "CSPSettingsVoIPUtils::IsVoIPSupported( ) - OUT" ); + return voipSupport; + } + +// --------------------------------------------------------------------------- +// IsPreferredTelephonyVoIP - API method +// Returns ETrue if following items are ON: +// Common Voip (Feature Manager) +// Dynamic VoIP (Telephony settings) +// Preferred telephony (Rich call settings) +// + there is at least one SIP-VoIP profile stored +// --------------------------------------------------------------------------- +// +EXPORT_C TBool CSPSettingsVoIPUtils::IsPreferredTelephonyVoIP() const + { + XSPSLOGSTRING( + "CSPSettingsVoIPUtils::IsPreferredTelephonyVoIP() - IN" ); + + // Check that VoIP is supported + TBool voipSupported( IsVoIPSupported() ); + + XSPSLOGSTRING2( + "CSPSettingsVoIPUtils::VoipSupported: %d",voipSupported ); + + // Check the preferred telephony + TBool voipPreferred( EFalse ); + TRAP_IGNORE( voipPreferred = IsPreferredTelephonyVoIPL() ); + + XSPSLOGSTRING2( + "CSPSettingsVoIPUtils::VoipPreferred: %d", voipPreferred ); + + XSPSLOGSTRING( + "CSPSettingsVoIPUtils::IsPreferredTelephonyVoIP() - OUT" ); + return voipPreferred && voipSupported; + } + +// --------------------------------------------------------------------------- +// Get id of the preferred service +// --------------------------------------------------------------------------- +// +EXPORT_C TInt CSPSettingsVoIPUtils::GetPreferredService( TUint& aServiceId ) + const + { + XSPSLOGSTRING( + "CSPSettingsVoIPUtils::GetPreferredService() - IN" ); + + TRAPD( error, DoGetPreferredServiceL( aServiceId ) ); + return error; + } + +// --------------------------------------------------------------------------- +// Is VoIP supported - Actual implementation +// --------------------------------------------------------------------------- +// +TBool CSPSettingsVoIPUtils::IsVoIPSupportedL( ) const + { + FeatureManager::InitializeLibL(); + TBool voipSupportByFM = FeatureManager::FeatureSupported( KFeatureIdCommonVoip ); + FeatureManager::UnInitializeLib(); + + if ( voipSupportByFM ) + { + TInt voipSupport( KVoIPOFF ); + CRepository* repository + = CRepository::NewLC( KCRUidTelephonySettings ); + repository->Get( KDynamicVoIP, voipSupport ); + CleanupStack::PopAndDestroy( repository ); + return KVoIPOFF != voipSupport; + } + else + { + return EFalse; + } + } + +// --------------------------------------------------------------------------- +// Is VoIP preferred telephony - Actual implementation +// --------------------------------------------------------------------------- +// +TBool CSPSettingsVoIPUtils::IsPreferredTelephonyVoIPL() const + { + TBool voipPreferred( EFalse ); + + CRepository* repository = CRepository::NewLC( KCRUidRichCallSettings ); + TInt value(0); + repository->Get( KRCSEPreferredTelephony, value ); + voipPreferred = ( KRCSEInternetCallPreferred == value ? ETrue : EFalse ); + CleanupStack::PopAndDestroy( repository ); + + return voipPreferred && VoIPProfilesExistL(); + } + +// --------------------------------------------------------------------------- +// Get Preferred Service - Actual implementation +// --------------------------------------------------------------------------- +// +void CSPSettingsVoIPUtils::DoGetPreferredServiceL( + TUint& aServiceId ) const + { + XSPSLOGSTRING( + "CSPSettingsVoIPUtils::DoGetPreferredServiceL() - IN" ); + + if ( !IsVoIPSupportedL() ) + { + // Voip not supported + User::Leave( KErrNotSupported ); + } + + // Get the preferred service id + CRepository* repository = CRepository::NewLC( KCRUidRichCallSettings ); + TInt value(0); + User::LeaveIfError( repository->Get( KRCSPSPreferredService, value ) ); + CleanupStack::PopAndDestroy( repository ); + + + XSPSLOGSTRING2( + "CSPSettingsVoIPUtils::DoGetPreferredServiceL() service:%d",value ); + if ( 0 == value ) + { + // Preferred service not setted. + User::Leave( KErrNotFound ); + } + + aServiceId = value; + } +