diff -r 000000000000 -r 5f000ab63145 phoneengine/PhoneCntFinder/ContactService/src/CPhCntService.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phoneengine/PhoneCntFinder/ContactService/src/CPhCntService.cpp Mon Jan 18 20:18:27 2010 +0200 @@ -0,0 +1,213 @@ +/* +* Copyright (c) 2006 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: Aiw service wrapper. +* +*/ + + +#include "CPhCntService.h" +#include +#include +#include +#include +#include "mphcntservicerequestparam.h" +#include "mphcntserviceresult.h" + +_LIT8( KContentType ,EGenericParamContactItemStr ); + +// --------------------------------------------------------------------------- +// Static constructor +// --------------------------------------------------------------------------- +// +CPhCntService* CPhCntService::NewL() + { + CPhCntService* self = + new( ELeave )CPhCntService(); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// --------------------------------------------------------------------------- +// Destructor +// --------------------------------------------------------------------------- +// +CPhCntService::~CPhCntService() + { + CancelRequest(); + if( iAiwService ) + { + iAiwService->Reset(); + } + iCriteriaArray.ResetAndDestroy(); + iCriteriaArray.Close(); + + delete iAiwService; + } + +// --------------------------------------------------------------------------- +// Attach AIW criterias +// --------------------------------------------------------------------------- +// +void CPhCntService::AttachCriteriasL() + { + // Note take array to member variable and detach from aiw when destructing. + CAiwCriteriaItem* selectCriteria = + CAiwCriteriaItem::NewLC( KAiwCmdSelect, KAiwCmdSelect, KContentType ); + TUid uid; + uid.iUid = KAiwClassBase; + selectCriteria->SetServiceClass( uid ); + selectCriteria->SetMaxProviders( 1 ); + iCriteriaArray.AppendL( selectCriteria ); + CleanupStack::Pop( selectCriteria ); + + CAiwCriteriaItem* assignCriteria = + CAiwCriteriaItem::NewLC( KAiwCmdAssign, KAiwCmdAssign, KContentType ); + + uid.iUid = KAiwClassMenu; + assignCriteria->SetServiceClass( uid ); + assignCriteria->SetMaxProviders( 1 ); + + + iCriteriaArray.AppendL( assignCriteria ); + iAiwService->AttachL( iCriteriaArray ); + CleanupStack::Pop( assignCriteria ); + } + + +// --------------------------------------------------------------------------- +// Cancels request if request is outstanding. +// --------------------------------------------------------------------------- +// +TInt CPhCntService::CancelRequest() + { + TInt err( KErrNone ); + if ( iParams ) + { + if( iClientCanceledRequest ) + { + *iClientCanceledRequest = ETrue; + } + // Cancel old requests + iCommandOptions |= KAiwOptCancel; + // Cancel is synchronous and we have request ongoing so + // do not use base class MakeAsyncRequest, because it uses + // CActiveSchedulerWait to make synchronisation and the + // wait scheduler is already waiting. If we would call the + // wait scheduler again, it would crash. + TRAP( err, DoMakeAsyncRequestL() ); + iCommandOptions = 0; // Reset the command options + } + return err; + } + +// --------------------------------------------------------------------------- +// From MPhCntService +// Executes AIW service rewuest. +// --------------------------------------------------------------------------- +// +void CPhCntService::ExecuteRequestL( + MPhCntServiceRequestParam& aParams, + MPhCntServiceResult& aResult ) + { + if( !IsActive() ) + { + // Destructor can indicate canceling of request using + // iClientCanceledRequest. + TBool requestCanceledByClient = EFalse; + iClientCanceledRequest = &requestCanceledByClient; + + SetRequestAndResult( aParams, aResult ); + TInt err( KErrNone ); + TRAPD( applicationShuttingdown, err = MakeAsyncRequest() ); + // If application using phonecntfinder is ended from task switcher, then + // underlying CActiveSchedulerWait::Wait leaves. This needs to be + // trapped because we are using clients aParams and aResult, which + // are stack based objects. + if( applicationShuttingdown ) + { + // Cancel possible outstanding request + CancelRequest(); + iResult = NULL; + iParams = NULL; + User::Leave( applicationShuttingdown ); + } + + if( !requestCanceledByClient ) + { + iResult = NULL; + iParams = NULL; + } + else + { + err = KErrCancel; + } + + User::LeaveIfError( err ); + } + } + + +// --------------------------------------------------------------------------- +// From MPhCntAiwServiceCompleteObserver +// Notifies link fetch observer that links are fetched. +// --------------------------------------------------------------------------- +// +void CPhCntService::ServiceRequestComplete( TInt aError ) + { + ResponseReceived( aError ); + } + +void CPhCntService::ConstructL() + { + BaseConstructL(); + iAiwService = CAiwServiceHandler::NewL(); + AttachCriteriasL(); + + } + +CPhCntService::CPhCntService() : + iAiwServiceObserver( *this ) + { + } + +// --------------------------------------------------------------------------- +// From CPhCntAsyncToSync +// Makes the actual aiw request. +// --------------------------------------------------------------------------- +// +void CPhCntService::DoMakeAsyncRequestL() + { + iAiwService->ExecuteServiceCmdL( + iParams->Command(), + iParams->InParamList(), + iAiwService->OutParamListL(), + iCommandOptions, + &iAiwServiceObserver ); + } + +// --------------------------------------------------------------------------- +// Sets variables +// --------------------------------------------------------------------------- +// +void CPhCntService::SetRequestAndResult( + MPhCntServiceRequestParam& aServiceRequestParams, + MPhCntServiceResult& aResult ) + { + iResult = &aResult; + iParams = &aServiceRequestParams; + iAiwServiceObserver.SetRequestAndResult( iParams, iResult ); + } +