serviceproviders/sapi_contacts_vpbk/contactservice/src/contactviewobserver.cpp
changeset 5 989d2f495d90
child 10 fc9cf246af83
--- /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;
+	}