diff -r 65a3ef1d5bd0 -r f742655b05bf commsconfig/cscengine/src/cscengservicehandler.cpp --- a/commsconfig/cscengine/src/cscengservicehandler.cpp Thu Aug 19 09:45:22 2010 +0300 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,615 +0,0 @@ -/* -* Copyright (c) 2007-2009 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: For CSC needed Service Provider Settings handling -* -*/ - - -#include -#include -#include -#include -#include -#include -#include - -#include "cscenglogger.h" -#include "cscengservicehandler.h" -#include "mcscengserviceobserver.h" - -const TInt KDummyServiceCount = 1;// only remove cs service, VoIP service is not returned -const TInt KArrayInitSize = 2; - -// SCP-plugin uid for Sip VoIP -const TInt32 KSipVoIPSubServicePlugId = 0x1027545A; -// Preferred Telephony value is PS call -const TInt KRCSEInternetCallPreferred = 1; -// Preferred Telephony value is CS call -const TInt KRCSECSCallPreferred = 0; - -// ======== MEMBER FUNCTIONS ======== - - -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// -CCSCEngServiceHandler::CCSCEngServiceHandler() - { - } - - -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// -void CCSCEngServiceHandler::ConstructL( MCSCEngServiceObserver* aObserver ) - { - CSCENGDEBUG( "CCSCEngServiceHandler::ConstructL - begin" ); - - iObserver = aObserver; - iServiceSettings = CSPSettings::NewL(); - iNotifier = CSPNotifyChange::NewL( *this ); - iSettingsVoIPUtils = CSPSettingsVoIPUtils::NewL(); - - RArray serviceIds; - iNotifier->NotifyChangeL( serviceIds ); - - CSCENGDEBUG( "CCSCEngServiceHandler::ConstructL - end" ); - } - - -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// -EXPORT_C CCSCEngServiceHandler* CCSCEngServiceHandler::NewL( - MCSCEngServiceObserver* aObserver ) - { - CCSCEngServiceHandler* self = new (ELeave) CCSCEngServiceHandler; - CleanupStack::PushL( self ); - self->ConstructL( aObserver ); - CleanupStack::Pop( self ); - return self; - } - - -// --------------------------------------------------------------------------- -// --------------------------------------------------------------------------- -// -CCSCEngServiceHandler::~CCSCEngServiceHandler() - { - CSCENGDEBUG( - "CCSCEngServiceHandler::~CCSCEngCenrepHandler - begin" ); - - iServiceName.Close(); - delete iSettingsVoIPUtils; - delete iServiceSettings; - delete iNotifier; - - CSCENGDEBUG( - "CCSCEngServiceHandler::~CCSCEngCenrepHandler - end" ); - } - - -// --------------------------------------------------------------------------- -// For getting all service ids -// --------------------------------------------------------------------------- -// -EXPORT_C void CCSCEngServiceHandler::GetAllServiceIdsL( - RArray& aServiceIds ) - { - CSCENGDEBUG( "CCSCEngServiceHandler::GetAllServiceIds - begin" ); - - iServiceSettings->FindServiceIdsL( aServiceIds ); - - // Remove 'dummy service's' from service ids list. - if ( KDummyServiceCount <= aServiceIds.Count() ) - { - for ( TUint i = 0; i < KDummyServiceCount; i++ ) - { - aServiceIds.Remove( 0 ); - } - } - - CSCENGDEBUG( "CCSCEngServiceHandler::GetAllServiceIds - end" ); - } - - -// --------------------------------------------------------------------------- -// For getting service provider settings count -// --------------------------------------------------------------------------- -// -EXPORT_C TInt CCSCEngServiceHandler::ServiceIdCountL() - { - CSCENGDEBUG2( - "CCSCEngServiceHandler::ServiceIdCount COUNT=%d", - iServiceSettings->SettingsCountL() ); - - return iServiceSettings->SettingsCountL(); - } - - -// --------------------------------------------------------------------------- -// For deleting service -// --------------------------------------------------------------------------- -// -EXPORT_C void CCSCEngServiceHandler::DeleteServiceL( TUint aServiceId ) - { - CSCENGDEBUG( "CCSCEngServiceHandler::DeleteServiceL - begin" ); - - User::LeaveIfError( iServiceSettings->DeleteEntryL( aServiceId ) ); - - CSCENGDEBUG( "CCSCEngServiceHandler::DeleteServiceL - end" ); - } - - -// --------------------------------------------------------------------------- -// For getting service name -// --------------------------------------------------------------------------- -// -EXPORT_C const TDesC16& CCSCEngServiceHandler::ServiceNameL( - TUint aServiceId ) - { - CSCENGDEBUG( "CCSCEngServiceHandler::ServiceNameL - begin" ); - - iServiceName.Zero(); - RArray serviceIds; - CleanupClosePushL( serviceIds ); - - GetAllServiceIdsL( serviceIds ); - - CDesCArray* serviceNames = - new ( ELeave ) CDesCArrayFlat( KArrayInitSize ); - CleanupStack::PushL( serviceNames ); - - iServiceSettings->FindServiceNamesL( serviceIds, *serviceNames ); - - TBool serviceFound( EFalse ); - for ( TInt i( 0 ) ; i < serviceIds.Count() && !serviceFound ; i++ ) - { - if ( aServiceId == serviceIds[ i ] ) - { - serviceFound = ETrue; - iServiceName.Close(); - iServiceName.CreateL( serviceNames->MdcaPoint( i ) ); - } - } - - if ( !serviceFound ) - { - User::Leave( KErrNotFound ); // leave if service not found - } - - CleanupStack::PopAndDestroy( serviceNames ); - CleanupStack::PopAndDestroy( &serviceIds ); - - CSCENGDEBUG( "CCSCEngServiceHandler::ServiceNameL - end" ); - - return iServiceName; - } - -// --------------------------------------------------------------------------- -// For getting brand id -// --------------------------------------------------------------------------- -// -EXPORT_C void CCSCEngServiceHandler::BrandIdL( - TUint aServiceId, TDes16& aBrandId ) - { - CSCENGDEBUG( "CCSCEngServiceHandler::BrandIdL - begin" ); - - CSPProperty* property = CSPProperty::NewLC(); - - User::LeaveIfError( iServiceSettings->FindPropertyL( - aServiceId, EPropertyBrandId, *property ) ); - - User::LeaveIfError( property->GetValue( aBrandId ) ); - - CleanupStack::PopAndDestroy( property ); - - CSCENGDEBUG2( "CCSCEngServiceHandler::BrandIdL BRANDID=%S", &aBrandId ); - - CSCENGDEBUG( "CCSCEngServiceHandler::BrandIdL - end" ); - } - -// --------------------------------------------------------------------------- -// For getting snap id -// --------------------------------------------------------------------------- -// -EXPORT_C TInt CCSCEngServiceHandler::SnapIdL( TUint aServiceId ) - { - CSCENGDEBUG( "CCSCEngServiceHandler::SnapIdL - begin" ); - - CSPProperty* property = CSPProperty::NewLC(); - TInt snapId( 0 ); - - User::LeaveIfError( iServiceSettings->FindPropertyL( - aServiceId, ESubPropertyVoIPPreferredSNAPId, *property ) ); - - User::LeaveIfError( property->GetValue( snapId ) ); - - CleanupStack::PopAndDestroy( property ); - - CSCENGDEBUG( "CCSCEngServiceHandler::SnapIdL - end" ); - - return snapId; - } - -// --------------------------------------------------------------------------- -// For getting service setup plug-in id -// --------------------------------------------------------------------------- -// -EXPORT_C TInt32 CCSCEngServiceHandler::ServiceSetupPluginIdL( - TUint aServiceId ) - { - CSCENGDEBUG( "CCSCEngServiceHandler::ServiceSetupPluginId - begin" ); - - CSPProperty* property = CSPProperty::NewLC(); - - User::LeaveIfError( iServiceSettings->FindPropertyL( - aServiceId, EPropertyServiceSetupPluginId, *property ) ); - - TInt serviceSetupPluginId( 0 ); - User::LeaveIfError( property->GetValue( serviceSetupPluginId ) ); - - CleanupStack::PopAndDestroy( property ); - - CSCENGDEBUG( "CCSCEngServiceHandler::ServiceSetupPluginId - end" ); - - return serviceSetupPluginId; - } - - -// --------------------------------------------------------------------------- -// For getting service´s phonebook tab view id -// --------------------------------------------------------------------------- -// -EXPORT_C TInt CCSCEngServiceHandler::ServiceTabViewIdL( TUint aServiceId ) - { - CSPProperty* property = CSPProperty::NewLC(); - - User::LeaveIfError( iServiceSettings->FindPropertyL( - aServiceId, EPropertyContactViewId, *property ) ); - - TInt tabViewId( 0); - User::LeaveIfError( property->GetValue( tabViewId ) ); - - CleanupStack::PopAndDestroy( property ); - - CSCENGDEBUG2( "CCSCEngServiceHandler::ServiceTabViewIdL: %d", tabViewId ); - - return tabViewId; - } - -// --------------------------------------------------------------------------- -// For getting service´s IM settings id. -// --------------------------------------------------------------------------- -// -EXPORT_C TInt CCSCEngServiceHandler::ImSettingsIdL( TUint aServiceId ) - { - CSCENGDEBUG( "CCSCEngServiceHandler::ImSettingsIdL - begin" ); - - CSPProperty* property = CSPProperty::NewLC(); - - User::LeaveIfError( iServiceSettings->FindPropertyL( - aServiceId, ESubPropertyIMSettingsId, *property ) ); - - TInt settingsId( 0 ); - User::LeaveIfError( property->GetValue( settingsId ) ); - - CleanupStack::PopAndDestroy( property ); - - CSCENGDEBUG( "CCSCEngServiceHandler::ImSettingsIdL - end" ); - - return settingsId; - } - -// --------------------------------------------------------------------------- -// For setting service´s IM settings id. -// --------------------------------------------------------------------------- -// -EXPORT_C void CCSCEngServiceHandler::SetImSettingsIdL( - TUint aServiceId, TInt aSettingsId ) - { - CSCENGDEBUG( "CCSCEngServiceHandler::SetImSettingsIdL - begin" ); - - CSPProperty* property = CSPProperty::NewLC(); - - User::LeaveIfError( - property->SetName( ESubPropertyIMSettingsId ) ); - User::LeaveIfError( property->SetValue( aSettingsId ) ); - - iServiceSettings->AddOrUpdatePropertyL( aServiceId, *property ); - - CleanupStack::PopAndDestroy( property ); - - CSCENGDEBUG( "CCSCEngServiceHandler::SetImSettingsIdL - end" ); - } - -// --------------------------------------------------------------------------- -// For getting service´s presence request preference setting -// --------------------------------------------------------------------------- -// -EXPORT_C TOnOff CCSCEngServiceHandler::PresenceReqPrefL( TUint aServiceId ) - { - CSCENGDEBUG( "CCSCEngServiceHandler::PresenceReqPrefL" ); - - CSPProperty* property = CSPProperty::NewLC(); - - User::LeaveIfError( iServiceSettings->FindPropertyL( - aServiceId, ESubPropertyPresenceRequestPreference , *property ) ); - - TOnOff onOff = EOn; - User::LeaveIfError( property->GetValue( onOff ) ); - - CleanupStack::PopAndDestroy( property ); - - return onOff; - } - - -// --------------------------------------------------------------------------- -// For setting service´s presence request preference setting -// --------------------------------------------------------------------------- -// -EXPORT_C void CCSCEngServiceHandler::SetPresenceReqPrefL( - TUint aServiceId, TOnOff aOnOff ) - { - CSCENGDEBUG2( - "CCSCEngServiceHandler::SetPresenceReqPrefL: aOnOff=%d", aOnOff ); - - CSPProperty* property = CSPProperty::NewLC(); - User::LeaveIfError( - property->SetName( ESubPropertyPresenceRequestPreference ) ); - User::LeaveIfError( property->SetValue( aOnOff ) ); - - iServiceSettings->AddOrUpdatePropertyL( aServiceId, *property ); - CleanupStack::PopAndDestroy( property ); - } - - -// --------------------------------------------------------------------------- -// For getting service´s handover notification tone preference setting -// --------------------------------------------------------------------------- -// -EXPORT_C TOnOff CCSCEngServiceHandler::HandoverNotifTonePrefL( - TUint aServiceId ) - { - CSCENGDEBUG( "CCSCEngServiceHandler::HandoverNotifTonePrefL" ); - - CSPProperty* property = CSPProperty::NewLC(); - - User::LeaveIfError( iServiceSettings->FindPropertyL( - aServiceId, ESubPropertyVccHoNotificationToneMode , *property ) ); - - RBuf value( 0 ); - CleanupClosePushL( value ); - value.CreateL( 1 ); - User::LeaveIfError( property->GetValue( value ) ); - - // convert rbuf to int - TInt intValue; - TLex temp( value ); - User::LeaveIfError( temp.Val( intValue ) ); - - CleanupStack::PopAndDestroy( &value ); - CleanupStack::PopAndDestroy( property ); - - TOnOff onOff = EOONotSet; - - switch ( intValue ) - { - case 0: - { - onOff = EOff; - } - break; - case 1: - { - onOff = EOn; - } - break; - default: - { - onOff = EOONotSet; - } - break; - } - - CSCENGDEBUG2( "CCSCEngServiceHandler::HandoverNotifTonePrefL: %d", onOff ); - - return onOff; - } - - -// --------------------------------------------------------------------------- -// For setting service´s handover notification tone preference setting -// --------------------------------------------------------------------------- -// -EXPORT_C void CCSCEngServiceHandler::SetHandoverNotifTonePrefL( - TUint aServiceId, TOnOff aOnOff ) - { - CSPProperty* property = CSPProperty::NewLC(); - User::LeaveIfError( - property->SetName( ESubPropertyVccHoNotificationToneMode ) ); - - RBuf value; - CleanupClosePushL( value ); - value.CreateL( 1 ); - value.AppendNum( aOnOff ); - User::LeaveIfError( property->SetValue( value ) ); - - iServiceSettings->AddOrUpdatePropertyL( aServiceId, *property ); - - CleanupStack::PopAndDestroy( &value ); - CleanupStack::PopAndDestroy( property ); - } - - -// --------------------------------------------------------------------------- -// For finding out if service supports VCC -// --------------------------------------------------------------------------- -// -EXPORT_C TBool CCSCEngServiceHandler::IsVccSupportedL( TUint aServiceId ) - { - TBool supported( EFalse ); - - TInt vccServiceId( KErrNone ); - TInt error( KErrNone ); - - // Array of service provider IDs - // is defined as: typedef RArray RIdArray - // in spdefinitions.h - RIdArray serviceIdArray; - CleanupClosePushL( serviceIdArray ); - - // This should leave if error occurs - error = iServiceSettings->FindServiceIdsL( serviceIdArray ); - User::LeaveIfError( error ); - - TInt serviceId( KErrNone ); - TBool foundEntry( EFalse ); - - for ( TInt i( 0 ); i < serviceIdArray.Count() && !foundEntry; i++ ) - { - CSPProperty* property = CSPProperty::NewLC(); - error = iServiceSettings->FindPropertyL( - serviceIdArray[i], ESubPropertyVccVDI, *property ); - - if( error == KErrNone ) - { - vccServiceId = serviceIdArray[i]; - foundEntry = ETrue; - } - CleanupStack::PopAndDestroy( property ); - } - - CleanupStack::PopAndDestroy( &serviceIdArray ); - - if ( vccServiceId ) - { - CSPProperty* property2 = CSPProperty::NewLC(); - - iServiceSettings->FindPropertyL( - vccServiceId, - ESubPropertyVccDtVoipServiceId, - *property2 ); - - TInt error = property2->GetValue( serviceId ); - User::LeaveIfError( error ); - CleanupStack::PopAndDestroy( property2 ); - } - - if ( serviceId == aServiceId ) - { - supported = ETrue; - } - - CSCENGDEBUG2( "CCSCEngServiceHandler::IsVccSupportedL: %d", supported ); - - return supported; - } - - -// --------------------------------------------------------------------------- -// For finding out if service supports SIP/VoIP -// --------------------------------------------------------------------------- -// -EXPORT_C TBool CCSCEngServiceHandler::IsSipVoIPL( TUint aServiceId ) - { - TBool sipVoIP( EFalse ); - TInt uid( 0 ); - - CSPProperty* property = CSPProperty::NewLC(); - - User::LeaveIfError( iServiceSettings->FindPropertyL( - aServiceId, EPropertyVoIPSubServicePluginId , *property ) ); - - User::LeaveIfError( property->GetValue( uid ) ); - - if ( KSipVoIPSubServicePlugId == uid ) - { - sipVoIP = ETrue; - } - - CSCENGDEBUG2( "CCSCEngServiceHandler::IsSipVoIP: %d", sipVoIP ); - - CleanupStack::PopAndDestroy( property ); - - return sipVoIP; - } - -// --------------------------------------------------------------------------- -// For finding out if service is the preferred service -// --------------------------------------------------------------------------- -// -EXPORT_C TBool CCSCEngServiceHandler::IsPreferredService( TUint aServiceId ) - const - { - TUint service( 0 ); - TInt ret = iSettingsVoIPUtils->GetPreferredService( service ); - - return ( KErrNone == ret && service == aServiceId ); - } - -// --------------------------------------------------------------------------- -// For finding out if voip is preferred telephony value -// --------------------------------------------------------------------------- -// -EXPORT_C TBool CCSCEngServiceHandler::IsPreferredTelephonyVoip() const - { - return iSettingsVoIPUtils->IsPreferredTelephonyVoIP(); - } - -// --------------------------------------------------------------------------- -// Sets the preferred telephony value -// --------------------------------------------------------------------------- -// -EXPORT_C TInt CCSCEngServiceHandler::SetVoipAsPrefTelephony( - TBool aValue, - TUint aServiceId ) const - { - TRAPD( err, SetVoipAsPrefTelephonyL( aValue, aServiceId ) ); - return err; - } - -// --------------------------------------------------------------------------- -// Sets the preferred telephony value -// --------------------------------------------------------------------------- -// -void CCSCEngServiceHandler::SetVoipAsPrefTelephonyL( - TBool aValue, - TUint aServiceId ) const - { - TInt value( aValue ? KRCSEInternetCallPreferred : KRCSECSCallPreferred ); - TInt serviceId( aServiceId ); - - CRepository* repository = CRepository::NewLC( KCRUidRichCallSettings ); - - User::LeaveIfError( repository->Set( KRCSEPreferredTelephony, value ) ); - User::LeaveIfError( repository->Set( KRCSPSPreferredService, serviceId ) ); - CleanupStack::PopAndDestroy( repository ); - } - -// --------------------------------------------------------------------------- -// From class MSPNotifyChangeObserver -// Notifies change in service table -// --------------------------------------------------------------------------- -// -void CCSCEngServiceHandler::HandleNotifyChange( TUint /*aServiceId*/ ) - { - CSCENGDEBUG( "CCSCEngServiceHandler::HandleNotifyChange - begin" ); - - iObserver->NotifyServiceChange(); - - CSCENGDEBUG( "CCSCEngServiceHandler::HandleNotifyChange - end" ); - } -