--- /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 <CVPbkContactLinkArray.h>
+#include <MVPbkContactViewBase.h>
+
+#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;
+ }