diff -r 000000000000 -r ff3b6d0fd310 cellular/telephonysettings/src/PsetCli.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cellular/telephonysettings/src/PsetCli.cpp Tue Feb 02 01:11:09 2010 +0200 @@ -0,0 +1,412 @@ +/* +* Copyright (c) 2002 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: CPsetCli is provides calling line identification SS. +* +* +*/ + + +//INCLUDE FILES +#include "PsetCli.h" +#include "PSetPanic.h" +#include "PsetConstants.h" +#include "MPsetRequestObs.h" +#include +#include + +// CONSTANTS +_LIT( KPSNameOfClass, "CPsetCli" ); + +// MEMBER FUNCTIONS +// --------------------------------------------------------------------------- +// Symbian OS 1st phase Constructor. +// --------------------------------------------------------------------------- +// +EXPORT_C CPsetCli* CPsetCli::NewL( RMobilePhone& aPhone, MPsetCliObserver& aObserver ) + { + CPsetCli* self = new ( ELeave ) CPsetCli( aPhone ); + CleanupStack::PushL( self ); + // Sets up TLS, must be done before FeatureManager is used. + FeatureManager::InitializeLibL(); + CleanupStack::Pop( self ); + self->SetObserver( aObserver ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor. +// --------------------------------------------------------------------------- +// +EXPORT_C CPsetCli::~CPsetCli() + { + // Remove FeatureManager + FeatureManager::UnInitializeLib(); + Cancel(); + iReqObserver = NULL; + } + +// --------------------------------------------------------------------------- +// C++ Constructor. +// --------------------------------------------------------------------------- +// +CPsetCli::CPsetCli( RMobilePhone& aPhone ) : CActive( EPriorityStandard ), +iPhone( aPhone ) + { + CActiveScheduler::Add( this ); + } + +// --------------------------------------------------------------------------- +// Cancels all requests. +// --------------------------------------------------------------------------- +// +EXPORT_C void CPsetCli::CancelAll() + { + // Set PSUI so that correct observer is used and hide requesting note. + // When interrupting a note, does not leave. + // This needs to be done first, since notes must be cleared from screen + // even though request is not active. + iObserver->SetEngineContact( this ); + TRAPD( ignore, iObserver->HandleCliRequestingL( EFalse, ETrue ) ); + // Line below fixes armv5 warning. + ignore = ignore; + + if ( !IsActive() ) + { + return; + } + + Cancel(); + } + +// --------------------------------------------------------------------------- +// Requests for COLP mode. +// --------------------------------------------------------------------------- +// +EXPORT_C void CPsetCli::GetColpModeL() + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + IssueRequestL( RMobilePhone::EIdServiceConnectedPresentation ); + } + +// --------------------------------------------------------------------------- +// Requests for CLIP mode. +// --------------------------------------------------------------------------- +// +EXPORT_C void CPsetCli::GetClipModeL() + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + IssueRequestL( RMobilePhone::EIdServiceCallerPresentation ); + } + +// --------------------------------------------------------------------------- +// Requests for COLP mode. +// --------------------------------------------------------------------------- +// +EXPORT_C void CPsetCli::GetClirModeL() + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + IssueRequestL( RMobilePhone::EIdServiceCallerRestriction ); + } + +// --------------------------------------------------------------------------- +// Requests for COLR mode. +// --------------------------------------------------------------------------- +// +EXPORT_C void CPsetCli::GetColrModeL() + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + IssueRequestL( RMobilePhone::EIdServiceConnectedRestriction ); + } + +// --------------------------------------------------------------------------- +// Sets request observer. +// --------------------------------------------------------------------------- +// +EXPORT_C void CPsetCli::SetRequestObserver( MPsetRequestObserver* aObs ) + { + iReqObserver = aObs; + } + +// --------------------------------------------------------------------------- +// Make request to get CNAP status +// --------------------------------------------------------------------------- +// +EXPORT_C void CPsetCli::GetCnapL() + { + if ( FeatureManager::FeatureSupported( KFeatureIdPhoneCnap ) ) + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + IssueRequestL( RMobilePhone::EIdServiceCallerName ); + } + } + +//--------------------------------------------------------------------------- +// Handles completed request. +// +//--------------------------------------------------------------------------- +// +void CPsetCli::RunL() + { + __ASSERT_ALWAYS( iObserver, Panic( KPSNameOfClass, ECliNoObserver ) ); + TBool commonNotes = ETrue; + + //Hide requesting note - does not leave when deleting a note. + iObserver->SetEngineContact( this ); + iObserver->HandleCliRequestingL( EFalse, EFalse ); + if ( iStatus != KErrNone ) + { + iObserver->HandleCliErrorL( iStatus.Int() ); + RequestCompleted( iStatus.Int() ); + return; + } + + TPsuiCli type = EPsuiCliUnknown; + + switch ( iRequestedService ) + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + case RMobilePhone::EIdServiceConnectedRestriction: + switch ( iServiceStatus ) + { + case RMobilePhone::EIdServiceActivePermanent: + type = EPsuiColrOn; + break; + case RMobilePhone::EIdServiceNotProvisioned: + type = EPsuiColrOff; + break; + case RMobilePhone::EIdServiceUnknown: + type = EPsuiCliUnknown; + break; + default: + break; + } + break; + case RMobilePhone::EIdServiceConnectedPresentation: + switch ( iServiceStatus ) + + { + case RMobilePhone::EIdServiceActivePermanent: + type = EPsuiColpOn; + break; + case RMobilePhone::EIdServiceNotProvisioned: + type = EPsuiColpOff; + break; + case RMobilePhone::EIdServiceUnknown: + type = EPsuiCliUnknown; + break; + default: + break; + } + break; + case RMobilePhone::EIdServiceCallerRestriction: + switch ( iServiceStatus ) + + { + case RMobilePhone::EIdServiceActivePermanent: + case RMobilePhone::EIdServiceActiveDefaultRestricted: + type = EPsuiClirOn; + break; + case RMobilePhone::EIdServiceActiveDefaultAllowed: + case RMobilePhone::EIdServiceNotProvisioned: + type = EPsuiClirOff; + break; + case RMobilePhone::EIdServiceUnknown: + type = EPsuiCliUnknown; + break; + default: + break; + } + break; + case RMobilePhone::EIdServiceCallerPresentation: + switch ( iServiceStatus ) + { + case RMobilePhone::EIdServiceActivePermanent: + type = EPsuiClipOn; + break; + case RMobilePhone::EIdServiceNotProvisioned: + type = EPsuiClipOff; + break; + case RMobilePhone::EIdServiceUnknown: + type = EPsuiCliUnknown; + break; + default: + break; + } + break; + case RMobilePhone::EIdServiceCallerName: + commonNotes = EFalse; + iObserver->HandleCnapStatusL( iServiceStatus ); + break; + default: + Panic( KPSNameOfClass, ECliParameter ); + break; + } + + if ( commonNotes ) + { + iObserver->CliInformationL( type ); + } + RequestCompleted( KErrNone ); + } + +// --------------------------------------------------------------------------- +// Cancels pending request. +// +// --------------------------------------------------------------------------- +// +void CPsetCli::DoCancel() + { + if ( !IsActive() ) + { + return; + } + switch ( iRequestedService ) + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + case RMobilePhone::EIdServiceConnectedRestriction: + case RMobilePhone::EIdServiceConnectedPresentation: + case RMobilePhone::EIdServiceCallerRestriction: + case RMobilePhone::EIdServiceCallerPresentation: + case RMobilePhone::EIdServiceCallerName: + iPhone.CancelAsyncRequest( EMobilePhoneGetIdentityServiceStatus ); + break; + default: + break; + } + SetRequestStatus( RMobilePhone::EIdServiceUnspecified ); + } + +// --------------------------------------------------------------------------- +// Sets observer. +// --------------------------------------------------------------------------- +// +void CPsetCli::SetObserver( MPsetCliObserver& aObserver ) + { + iObserver = &aObserver; + iObserver->SetEngineContact( this ); + } + +// --------------------------------------------------------------------------- +// +// Push object into cleanupstack to catch leaving. +// +// --------------------------------------------------------------------------- +// +void CPsetCli::CleanupLeavePushL() + { + CleanupStack::PushL( TCleanupItem( DoHandleLeave, this ) ); + } + +// --------------------------------------------------------------------------- +// +// Things to do when leave occurs. +// +// --------------------------------------------------------------------------- +// +void CPsetCli::HandleLeave() + { + CancelAll(); + } + +// --------------------------------------------------------------------------- +// +// Object has caused a leave. +// +// --------------------------------------------------------------------------- +// +void CPsetCli::DoHandleLeave( TAny* aAny ) + { + REINTERPRET_CAST( CPsetCli*, aAny )->HandleLeave(); + } + +// --------------------------------------------------------------------------- +// Inform the request observer that request has been completed. +// --------------------------------------------------------------------------- +// +void CPsetCli::RequestCompleted( const TInt& aError ) + { + if ( aError != KErrNone ) + { + SetRequestStatus( + static_cast (aError) ); + } + SetRequestStatus( RMobilePhone::EIdServiceUnspecified ); + + if ( iReqObserver ) + { + iReqObserver->RequestComplete(); + } + } + +// --------------------------------------------------------------------------- +// Issues pre-defined request. +// --------------------------------------------------------------------------- +// +void CPsetCli::IssueRequestL( RMobilePhone::TMobilePhoneIdService aService ) + { + if ( IsActive() ) + { + /***************************************************** + * Series 60 Customer / ETel + * Series 60 ETel API + *****************************************************/ + User::Leave( KErrGeneral ); + } + SetRequestStatus( aService ); + + iPhone.GetIdentityServiceStatus( iStatus, aService, iServiceStatus ); + SetActive(); + + // Set PSUI so that correct observer is used and show note. + iObserver->SetEngineContact( this ); + CleanupLeavePushL(); + iObserver->HandleCliRequestingL( ETrue, EFalse ); + CleanupStack::Pop(); // CleanupCancelPushL + } + +// --------------------------------------------------------------------------- +// Update the request status - both internally and to observers. +// --------------------------------------------------------------------------- +// +void CPsetCli::SetRequestStatus( RMobilePhone::TMobilePhoneIdService aStatus ) + { + iRequestedService = aStatus; + if ( iReqObserver ) + { + iReqObserver->RequestStatusChanged( aStatus ); + } + } + +// End of file