--- 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 <spentry.h>
-#include <spproperty.h>
-#include <spsettings.h>
-#include <spnotifychange.h>
-#include <spsettingsvoiputils.h>
-#include <centralrepository.h>
-#include <settingsinternalcrkeys.h>
-
-#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<TUint> 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<TUint>& 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<TUint> 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<TServiceId> 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" );
- }
-