diff -r 000000000000 -r ff3b6d0fd310 convergedcallengine/csplugin/src/cspsssettingshandler.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/convergedcallengine/csplugin/src/cspsssettingshandler.cpp Tue Feb 02 01:11:09 2010 +0200 @@ -0,0 +1,321 @@ +/* +* Copyright (c) 2007-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: implementation of CSPSsSettingsHandler class. +* +*/ + + +// INCLUDES +#include "cspsssettingshandler.h" +#include "csplogger.h" +#include "csppanic.pan" + +#include +#include + + +// ----------------------------------------------------------------------------- +// CSPSsSettingsHandler::CSPSsSettingsHandler +// C++ default constructor can NOT contain any code, that +// might leave. +// ----------------------------------------------------------------------------- +// +CSPSsSettingsHandler::CSPSsSettingsHandler( const MCCPSsObserver& aObs ) : + iObserver( const_cast(aObs) ) + { + CSPLOGSTRING( CSPOBJECT, "CSPSsSettingsHandler::CSPSsSettingsHandler" ); + } + +// ----------------------------------------------------------------------------- +// CSPSsSettingsHandler::ConstructL +// Symbian 2nd phase constructor can leave. +// ----------------------------------------------------------------------------- +// +void CSPSsSettingsHandler::ConstructL() + { + CSPLOGSTRING( CSPOBJECT, "CSPSsSettingsHandler::ConstructL <" ); + User::LeaveIfError( iSSSettings.Open() ); + CSPLOGSTRING( CSPOBJECT, "CSPSsSettingsHandler::ConstructL Reg " ); + TInt errorCode = iSSSettings.Register( ESSSettingsAls, *this ); + CSPLOGSTRING2( CSPINT, + "CSPSsSettingsHandler::ConstructL > iSSSettings.Register, errorCode: %d", + errorCode ); + if ( errorCode == KErrNotSupported ) + { + CSPLOGSTRING( CSPINT, "CSPSsSettingsHandler::ConstructL, ALS not supported" ); + } + else if ( errorCode == KErrNotReady ) + { + // Try again after idle + iRegisterAlsNofify = CIdle::NewL( CActive::EPriorityHigh ); + RegisterAfterIdle(); + } + + RMobilePhone::TMobilePhoneALSLine alsLine; + CSPLOGSTRING( CSPOBJECT, "CSPSsSettingsHandler::ConstructL GetALS" ); + GetALSLineL( alsLine ); + CSPLOGSTRING( CSPOBJECT, "CSPSsSettingsHandler::ConstructL Notify " ); + iObserver.NotifyCurrentActiveALSLine( (TInt) alsLine ); + + CSPLOGSTRING( CSPOBJECT, "CSPSsSettingsHandler::ConstructL >" ); + } + +// ----------------------------------------------------------------------------- +// CSPSsSettingsHandler::NewL +// Two-phased constructor. +// ----------------------------------------------------------------------------- +// +CSPSsSettingsHandler* CSPSsSettingsHandler::NewL( const MCCPSsObserver& aObs ) + { + CSPSsSettingsHandler* self = new ( ELeave ) CSPSsSettingsHandler( aObs ); + CleanupStack::PushL( self ); + self->ConstructL( ); + CleanupStack::Pop( self ); + CSPLOGSTRING( CSPOBJECT, "CSPSsSettingsHandler::NewL" ); + return self; + } + +// Destructor +CSPSsSettingsHandler::~CSPSsSettingsHandler() + { + CSPLOGSTRING( CSPOBJECT, "CSPSsSettingsHandler::~CSPSsSettingsHandler <" ); + iSSSettings.Close(); + CSPLOGSTRING( CSPOBJECT, "CSPSsSettingsHandler::~CSPSsSettingsHandler >" ); + if ( iRegisterAlsNofify ) + { + delete iRegisterAlsNofify; + } + } + +// ----------------------------------------------------------------------------- +// CSPSsSettingsHandler::GetALSLineL +// Sends synchronous request to get the ALS line and returns handle to access +// the status. +// (other items were commented in a header). +// ----------------------------------------------------------------------------- +// +void CSPSsSettingsHandler::GetALSLineL( + RMobilePhone::TMobilePhoneALSLine& aALSLine ) + { + TInt value; + User::LeaveIfError( iSSSettings.Get( ESSSettingsAls, value ) ); + + TSSSettingsAlsValue alsValue = + static_cast< TSSSettingsAlsValue > ( value ); + + switch( alsValue ) + { + case ESSSettingsAlsNotSupported: + aALSLine = RMobilePhone::EAlternateLineNotAvailable; + break; + case ESSSettingsAlsPrimary: + aALSLine = RMobilePhone::EAlternateLinePrimary; + break; + case ESSSettingsAlsAlternate: + aALSLine = RMobilePhone::EAlternateLineAuxiliary; + break; + default: + break; + } + } + +// ----------------------------------------------------------------------------- +// CSPSsSettingsHandler::SetALSLineL +// Sends synchronous request to set the ALS line and returns handle to access +// the status. +// ----------------------------------------------------------------------------- +// +void CSPSsSettingsHandler::SetALSLineL( + RMobilePhone::TMobilePhoneALSLine& aALSLine ) + { + TSSSettingsAlsValue alsValue = + static_cast ( aALSLine ); + + switch( aALSLine ) + { + case RMobilePhone::EAlternateLineUnknown: + case RMobilePhone::EAlternateLineNotAvailable: + alsValue = ESSSettingsAlsNotSupported; + break; + case RMobilePhone::EAlternateLinePrimary: + alsValue = ESSSettingsAlsPrimary; + break; + case RMobilePhone::EAlternateLineAuxiliary: + alsValue = ESSSettingsAlsAlternate; + break; + default: + CSPLOGSTRING( CSPINT, + "CSPSsSettingsHandler::SetALSLineL: Not valid value" ); + __ASSERT_DEBUG( EFalse, Panic( ECSPPanicInvalidRequest ) ); + break; + } + User::LeaveIfError( iSSSettings.Set( ESSSettingsAls, alsValue ) ); + } + +// ----------------------------------------------------------------------------- +// CSPSsSettingsHandler::GetClirL +// Sends synchronous request to get the CLIR value and returns handle to access +// the status. +// ----------------------------------------------------------------------------- +// +void CSPSsSettingsHandler::GetClirL( + RMobileCall::TMobileCallIdRestriction& aClir ) + { + TInt value; + User::LeaveIfError( iSSSettings.Get( ESSSettingsClir, value ) ); + + TSSSettingsClirValue clir = + static_cast ( value ); + CSPLOGSTRING2( CSPERROR, + "CSPSsSettingsHandler::GetClirL, clir: %d", clir ); + + switch( clir ) + { + case ESSSettingsClirNetworkDefault: + aClir = RMobileCall::EIdRestrictDefault; + break; + case ESSSettingsClirExplicitInvoke: + aClir = RMobileCall::EDontSendMyId; + break; + case ESSSettingsClirExplicitSuppress: + aClir = RMobileCall::ESendMyId; + break; + default: + CSPLOGSTRING2( CSPERROR, + "CSPSsSettingsHandler::GetClirL, NOT VALID aClir: %d", aClir ); + __ASSERT_DEBUG( EFalse, Panic( ECSPPanicInvalidRequest ) ); + break; + } + } + +// ----------------------------------------------------------------------------- +// CSPSsSettingsHandler::GetCugL +// Sends synchronous request to get the CUG index and returns handle to access +// the status. +// ----------------------------------------------------------------------------- +// +void CSPSsSettingsHandler::GetCugL( TInt& aCugIndex ) + { + CSPLOGSTRING2( CSPINT, + "CSPSsSettingsHandler::GetCugL, aCugIndex: %d", aCugIndex ); + User::LeaveIfError( iSSSettings.Get( ESSSettingsCug, aCugIndex ) ); + } + +// ----------------------------------------------------------------------------- +// CSPSsSettingsHandler::GetDefaultCugL +// Sends synchronous request to get the default CUG index +// ----------------------------------------------------------------------------- +// +void CSPSsSettingsHandler::GetDefaultCugL( TInt& aDefCug ) + { + User::LeaveIfError( iSSSettings.Get( ESSSettingsDefaultCug, aDefCug ) ); + } + +// ----------------------------------------------------------------------------- +// CSPSsSettingsHandler::IsValueValidCugIndex +// Sends synchronous request to check the CUG index +// ----------------------------------------------------------------------------- +// +TBool CSPSsSettingsHandler::IsValueValidCugIndex( const TInt& aValue ) const + { + return iSSSettings.IsValueValidCugIndex( aValue ); + } + +// --------------------------------------------------------- +// CSPSsSettingsHandler::PhoneSettingChanged +// --------------------------------------------------------- +// +void CSPSsSettingsHandler::PhoneSettingChanged( + TSSSettingsSetting aSetting, + TInt aNewValue ) + { + CSPLOGSTRING2( CSPINT, + "CSPSsSettingsHandler::PhoneSettingChanged, aNewValue : %d", + aNewValue ); + if ( aSetting == ESSSettingsAls ) + { + TSSSettingsAlsValue alsValue = + static_cast< TSSSettingsAlsValue > ( aNewValue ); + + RMobilePhone::TMobilePhoneALSLine + alsLine( RMobilePhone::EAlternateLineUnknown ); + + switch( alsValue ) + { + case ESSSettingsAlsNotSupported: + alsLine = RMobilePhone::EAlternateLineNotAvailable; + break; + case ESSSettingsAlsPrimary: + alsLine = RMobilePhone::EAlternateLinePrimary; + break; + case ESSSettingsAlsAlternate: + alsLine = RMobilePhone::EAlternateLineAuxiliary; + break; + default: + break; + } + + iObserver.NotifyCurrentActiveALSLine( (TInt) alsLine ); + } + } + +// ----------------------------------------------------------------------------- +// CSPSsSettingsHandler::RegisterAfterIdle +// ----------------------------------------------------------------------------- +// +void CSPSsSettingsHandler::RegisterAfterIdle() + { + CSPLOGSTRING( CSPINT, "CSPSsSettingsHandler::RegisterAfterIdle" ); + if ( !iRegisterAlsNofify->IsActive() ) + { + CSPLOGSTRING( CSPINT, "CSPSsSettingsHandler::RegisterAfterIdle > iRegisterAlsNofify->Star" ); + iRegisterAlsNofify->Start( + TCallBack( CIdleCallBack, this ) ); + } + } + +// ----------------------------------------------------------------------------- +// CSProvider::CIdleCallBack +// ----------------------------------------------------------------------------- +// +TInt CSPSsSettingsHandler::CIdleCallBack( TAny* aAny ) + { + CSPLOGSTRING( CSPINT, "CSPSsSettingsHandler::CIdleCallBack" ); + static_cast< CSPSsSettingsHandler* >( aAny )->Register(); + + return KErrNone; + } + +// ----------------------------------------------------------------------------- +// CSProvider::Register +// ----------------------------------------------------------------------------- +// +void CSPSsSettingsHandler::Register() + { + CSPLOGSTRING( CSPINT, "CSPSsSettingsHandler::Register" ); + TInt errorCode( KErrNotReady ); + + errorCode = iSSSettings.Register( ESSSettingsAls, *this ); + CSPLOGSTRING2( CSPINT, + "CSPSsSettingsHandler::Register > iSSSettings.Register, errorCode: %d", + errorCode ); + + if ( errorCode == KErrNotReady ) + { + // Try again + RegisterAfterIdle(); + } + } + +// End of file