diff -r a36b1e19a461 -r 989d2f495d90 serviceproviders/sapi_contacts_vpbk/contactservice/src/contactviewobserver.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/serviceproviders/sapi_contacts_vpbk/contactservice/src/contactviewobserver.cpp Fri Jul 03 15:51:24 2009 +0100 @@ -0,0 +1,158 @@ +/* +* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of the License "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: +* +*/ + + +#include +#include + +#include "contactiter.h" +#include "contactviewobserver.h" + + +//--------------------------------------------------------------------------- +// Method that gets the links from the view and passes the link array to the +// iterator. +//--------------------------------------------------------------------------- +void CContactViewObserver::SetupContactLinkArrayL(MVPbkContactViewBase& aView ) +{ + if((iFlag == EContactFilteredView) || ((iFlag == EContactDefaultView) && (iDefaultView))) + { + CVPbkContactLinkArray* linkArray = CVPbkContactLinkArray::NewL(); + CleanupStack::PushL(linkArray); + TInt viewCount = aView.ContactCountL(); + if(viewCount) + { + for(TInt i=0; i < viewCount; i++) + { + linkArray->AppendL(aView.CreateLinkLC(i)); + } + + //Set the params for iterator + iIter->SetParams(linkArray, *iStoreUri, iSortOrder, iTransId, EContacts, iContactService); + + //Notify the user + iCallback->HandleReturnIter(KErrNone, iIter, iTransId); + + CleanupStack::Pop(viewCount); + } + else + { + //Notify User + iCallback->HandleReturnValue(EOpComplete, KErrNotFound, iTransId); + delete iIter; + iIter = NULL; + } + CleanupStack::Pop(linkArray); + } +} + + +//--------------------------------------------------------------------------- +// This method is called by the ContactViewObserver when the view is ready +//--------------------------------------------------------------------------- +void CContactViewObserver::ContactViewReady(MVPbkContactViewBase& aView ) +{ + iSchedulerWait->AsyncStop(); + iContactService->RequestComplete(iTransId); + + TRAPD(error,SetupContactLinkArrayL(aView)); + if(error !=KErrNone) + { + //Notify User + iCallback->HandleReturnValue(EOpComplete, error, iTransId); + delete iIter; + iIter = NULL; + } +} + + +//--------------------------------------------------------------------------- +// NewL() +//--------------------------------------------------------------------------- + +CContactViewObserver* CContactViewObserver::NewL( MContactCallback* aCallback, enum TViewFlag aFlag, CContactIter* iIter,CContactService* aContactService,const TDesC& aStoreUri, TOrder aSortOrder, TInt aTransId, CActiveSchedulerWait* aSchedulerWait) +{ + CContactViewObserver* self = new( ELeave ) CContactViewObserver( aStoreUri, aFlag, iIter, aContactService, aCallback, aSortOrder, aTransId, aSchedulerWait); + return self; +} + + +//--------------------------------------------------------------------------- +// ConstructL() +//--------------------------------------------------------------------------- + + +CContactViewObserver::CContactViewObserver(const TDesC& aStoreUri, enum TViewFlag aFlag, CContactIter* aIter, CContactService* aContactService, MContactCallback* aCallback, TOrder aSortOrder, TInt aTransId, CActiveSchedulerWait* aSchedulerWait ) +: iStoreUri (&aStoreUri), + iFlag (aFlag), + iIter (aIter), + iCallback (aCallback), + iSortOrder (aSortOrder), + iTransId (aTransId), + iDefaultView (EFalse), + iSchedulerWait(aSchedulerWait), + iContactService(aContactService) +{ +} + +/* +------------------------------------------------------------------------------------- +CContactViewObserver::Cancel() +Description : Cancel implementation relevant to ViewObserver +Return values : KErrorNone on Success and KErrGeneral on Failure +------------------------------------------------------------------------------------- +*/ + +void CContactViewObserver::Cancel() + { + iCallback->HandleReturnValue(EOpCancel, KErrNone, iTransId); + iView->RemoveObserver(*this); + delete this; + } + +void CContactViewObserver::ReturnDefaultView() + { + iDefaultView = ETrue; + } + +void CContactViewObserver::ContactAddedToView( MVPbkContactViewBase& /*aView*/, TInt /*aIndex*/, const MVPbkContactLink& /*aContactLink */) + { + } +void CContactViewObserver::ContactRemovedFromView( MVPbkContactViewBase& /*aView*/, TInt /*aIndex*/, const MVPbkContactLink& /*aContactLink */) + { + } + +void CContactViewObserver::ContactViewUnavailable(MVPbkContactViewBase& /*aView*/ ) + { + iSchedulerWait->AsyncStop(); + iContactService->RequestComplete(iTransId); + //Notify User + iCallback->HandleReturnValue(EOpError, KErrAbort, iTransId); + delete iIter; + iIter = NULL; + } + + +void CContactViewObserver::ContactViewError( MVPbkContactViewBase& /*aView*/, TInt aError, TBool /*aErrorNotified*/ ) + { + iSchedulerWait->AsyncStop(); + iContactService->RequestComplete(iTransId); + //Notify User + iCallback->HandleReturnValue(EOpError, aError, iTransId); + delete iIter; + iIter = NULL; + }