phonebookengines/contactsmodel/tsrc/TestSyncPlugIn/cntsyncchecker.cpp
changeset 0 e686773b3f54
child 24 0ba2181d7c28
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/contactsmodel/tsrc/TestSyncPlugIn/cntsyncchecker.cpp	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,753 @@
+// Copyright (c) 2001-2009 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:
+//
+
+#include "../TestSyncPlugIn/cntsyncchecker.h"
+#include "../TestSyncPlugIn/cntsyncdata.h"
+#include "../TestSyncPlugIn/cntsyncphonedata.h"
+
+#include <cntdef.h>
+#include <cntdb.h>
+
+#include <centralrepository.h>  // CRepository.
+#include <e32property.h>
+#include <phbksync.h>
+
+class CContactSyncPhonebookData;
+class CPhonebookContact;
+
+
+
+
+
+EXPORT_C CContactSyncChecker* CContactSyncChecker::NewL()
+	{
+	CContactSyncChecker* self = new(ELeave) CContactSyncChecker();
+	return self;
+	}
+	
+	
+
+EXPORT_C CContactSyncChecker::~CContactSyncChecker()	
+	{
+	//TRAP_IGNORE(ResetL() );
+	}
+
+EXPORT_C TInt CContactSyncChecker::ValidateResponseL(MContactSynchroniser::TValidateOperation aOp)
+	{
+
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	TInt ret;
+	switch (aOp)
+		{
+	case MContactSynchroniser::ERead:
+		ret = settings.iReadValidateResponse;
+		break;
+	case MContactSynchroniser::ESearch:
+		ret = settings.iSearchValidateResponse;
+		break;
+	case MContactSynchroniser::EEdit:
+		ret = settings.iEditValidateResponse;
+		break;
+	default:
+		ret = KErrNone;
+		break;
+		}
+	CleanupStack::PopAndDestroy(temp);
+	return ret;
+	}
+
+EXPORT_C TInt CContactSyncChecker::ValidateWriteResponseL()
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	TInt ret(settings.iValidateWriteResponse);
+	CleanupStack::PopAndDestroy(temp);
+	return ret;
+	}
+
+EXPORT_C TInt CContactSyncChecker::DeleteContactResponseL()
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	TInt ret(settings.iDeleteContactResponse);
+	CleanupStack::PopAndDestroy(temp);
+	return ret;
+	}
+
+EXPORT_C TContactItemId CContactSyncChecker::ICCTemplateIdL(TUid aPhonebookUid)
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	TContactItemId ret = KNullContactId;
+	CContactSyncPhonebookData* tempData = settings.PhonebookData(aPhonebookUid);	
+	if (tempData)
+		{
+		ret = tempData->TemplateId();
+		}
+	CleanupStack::PopAndDestroy(temp);
+	return ret;
+	}
+
+EXPORT_C TContactItemId CContactSyncChecker::GroupIdL(TUid aPhonebookUid)
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	TContactItemId ret = KNullContactId;
+	CContactSyncPhonebookData* tempData = settings.PhonebookData(aPhonebookUid);	
+	if (tempData)
+		{
+		ret = tempData->GroupId();
+		}
+	CleanupStack::PopAndDestroy(temp);
+	return ret;
+	}
+
+EXPORT_C TUid CContactSyncChecker::PhonebookUidL(TContactItemId aTemplateId)
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	TUid ret = KUidIccPhonebookNotFound;
+	CContactSyncPhonebookData* tempData = settings.PhonebookDataFromTemplateId(aTemplateId);	
+	if (tempData)
+		{
+		ret = tempData->PhonebookUid();
+		}
+	CleanupStack::PopAndDestroy(temp);
+	return ret;
+	}
+	
+EXPORT_C void CContactSyncChecker::ResetEverythingL()
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	// all Validate Responses set to an error
+	settings.ResetCallCountAndValidateResponsesL();
+	// delete all phonebooks
+	settings.DeleteAllPhonebooks();
+	settings.WriteConfigurationDataL();	
+	CleanupStack::PopAndDestroy(temp);
+	}
+	
+/**
+ Current count of Phonebook Synch State change notifications outstanding - for all phonebooks
+ (Note this is across all Views using the test DLL.)
+ */
+EXPORT_C TInt CContactSyncChecker::TotalNotificationPendingCountL()
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	RPointerArray<CContactSyncPhonebookData>& perPhbkData = settings.PerPhonebookData();
+	const TInt phbkCount = perPhbkData.Count();
+	TInt total = 0;
+
+	for (TInt k = 0; k < phbkCount; ++k)
+		{
+		total += perPhbkData[k]->NotificationPendingCount();
+		}
+	CleanupStack::PopAndDestroy(temp);
+	return total;
+	}
+
+EXPORT_C void CContactSyncChecker::SetValidateResponseL(MContactSynchroniser::TValidateOperation aOp, TInt aError)
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	switch (aOp)
+		{
+	case MContactSynchroniser::ERead:
+		settings.iReadValidateResponse=aError;
+		break;
+	case MContactSynchroniser::ESearch:
+		settings.iSearchValidateResponse=aError;
+		break;
+	case MContactSynchroniser::EEdit:
+		settings.iEditValidateResponse=aError;
+		break;
+	default:
+		break;
+		}
+	settings.WriteConfigurationDataL();	
+	CleanupStack::PopAndDestroy(temp);
+	}
+
+EXPORT_C void CContactSyncChecker::SetValidateWriteResponseL(TInt aError)
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	settings.iValidateWriteResponse=aError;
+	settings.WriteConfigurationDataL();	
+	CleanupStack::PopAndDestroy(temp);
+	}
+
+EXPORT_C void CContactSyncChecker::SetDeleteContactResponseL(TInt aError)
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	settings.iDeleteContactResponse=aError;
+	settings.WriteConfigurationDataL();	
+	CleanupStack::PopAndDestroy(temp);
+	}
+
+EXPORT_C void CContactSyncChecker::SetPhonebookEntryL(TUid /*aPhonebookUid*/,TInt /*aPhonebookTemplateId*/,TInt /*aPhonebookGroupId*/)
+	{
+/*	TLookupPhonebookEntry phonebookEntry(aPhonebookUid,aPhonebookTemplateId,aPhonebookGroupId);
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	settings.iPhonebookEntries.Append(phonebookEntry);
+	settings.WriteConfigurationDataL();	
+	CleanupStack::PopAndDestroy(temp);*/
+	}
+	
+EXPORT_C TInt CContactSyncChecker::UpdatePhonebookEntryL(TUid aPhonebookUid, TInt aPhonebookTemplateId, TInt aPhonebookGroupId)
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	CContactSyncPhonebookData* phbkData = settings.PhonebookData(aPhonebookUid);
+	TInt ret = KErrNotFound;
+	if (phbkData)
+		{
+		phbkData->SetTemplateId(aPhonebookTemplateId);
+		phbkData->SetGroupId(aPhonebookGroupId);
+		ret = KErrNone;
+		}
+	settings.WriteConfigurationDataL();	
+	CleanupStack::PopAndDestroy(temp);
+
+	return ret;
+	}
+
+
+EXPORT_C void CContactSyncChecker::EnableVerboseLoggingL()
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	settings.iVerboseLoggingEnabled=ETrue;
+	settings.WriteConfigurationDataL();	
+	CleanupStack::PopAndDestroy(temp);
+	}
+
+EXPORT_C TBool CContactSyncChecker::VerboseLoggingEnabledL()
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	TBool ret = settings.iVerboseLoggingEnabled;
+	CleanupStack::PopAndDestroy(temp);
+	return ret;
+	}
+
+EXPORT_C void CContactSyncChecker::SyncMethodCalledL()
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	settings.iSyncCallCount++;
+	settings.WriteConfigurationDataL();	
+	CleanupStack::PopAndDestroy(temp);
+	}
+	
+
+
+EXPORT_C void CContactSyncChecker::ValidateMethodCalledL()
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	settings.iValidateCallCount++;
+	settings.WriteConfigurationDataL();	
+	CleanupStack::PopAndDestroy(temp);
+	}
+
+EXPORT_C void CContactSyncChecker::ResetMethodCallCountsL()
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	settings.iSyncCallCount = 0;
+	settings.iValidateCallCount = 0;
+	settings.WriteConfigurationDataL();	
+	CleanupStack::PopAndDestroy(temp);
+	}
+	
+EXPORT_C void CContactSyncChecker::PluginLoadedL()
+    {
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	settings.iPluginCallCount++;
+	settings.WriteConfigurationDataL();	
+	CleanupStack::PopAndDestroy(temp);
+    }
+    
+EXPORT_C void CContactSyncChecker::PluginUnloadedL()
+    {
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	settings.iPluginCallCount--;
+	settings.WriteConfigurationDataL();	
+	CleanupStack::PopAndDestroy(temp);
+    }
+
+EXPORT_C TInt CContactSyncChecker::ValidateMethodCallCountL()
+	{
+	TInt ret;
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	ret = settings.iValidateCallCount;
+	CleanupStack::PopAndDestroy(temp);
+	return ret;
+	}
+
+EXPORT_C TInt CContactSyncChecker::SyncMethodCallCountL()
+	{
+	TInt ret;
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	ret = settings.iSyncCallCount;
+	CleanupStack::PopAndDestroy(temp);
+	return ret;
+	}
+	
+EXPORT_C TInt CContactSyncChecker::PluginLoadedCountL()
+    {
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	TInt ret = settings.iPluginCallCount;
+	CleanupStack::PopAndDestroy(temp);
+	return ret;
+    }
+
+EXPORT_C void CContactSyncChecker::ResetL()
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	temp->WriteConfigurationDataL();
+	CleanupStack::PopAndDestroy(temp);
+	}
+
+
+EXPORT_C void CContactSyncChecker::SetSynchronisedL(TBool aIsSynchronised, TUid aPhonebookUid)
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	CContactSyncPhonebookData* phbkData = settings.PhonebookData(aPhonebookUid);
+	if (!phbkData)
+		{
+		User::Invariant();
+		}
+	phbkData->SetSynchronised(aIsSynchronised);
+	settings.WriteConfigurationDataL();	
+	CleanupStack::PopAndDestroy(temp);
+	}
+
+EXPORT_C TBool CContactSyncChecker::IsSynchronisedL(TUid aPhonebookUid)
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	CContactSyncPhonebookData* phbkData = settings.PhonebookData(aPhonebookUid);
+	if (!phbkData)
+		{
+		User::Leave(KErrNotSupported);
+		}
+	TBool ret = phbkData->IsSynchronisedL();;
+	CleanupStack::PopAndDestroy(temp);
+	return ret;
+	}
+
+
+
+
+
+ EXPORT_C void CContactSyncChecker::StoreNotificationRequestL(TRequestStatus& aStatus, TUid aPhonebookUid)
+ 	{
+	RProperty property;
+ 	CContactSyncData* temp = CContactSyncData::NewL();
+ 	CleanupStack::PushL(temp);
+ 	CContactSyncData& settings = temp->DataL();
+ 	CContactSyncPhonebookData* phbkData = settings.PhonebookData(aPhonebookUid);
+	TInt error(KErrNone);
+	if (!phbkData)
+		{
+		error = KErrNotSupported;
+		}
+	else
+		{
+		aStatus=KRequestPending;
+		//Store any value, the value does not mean anything, the reason is to let the vector grow
+		phbkData->StoreNotificationRequest(100);
+ 		settings.WriteConfigurationDataL();
+	 	// Define a property using Publish and Subscribe.
+	    RProperty::Define(
+	    	SyncNotification::KPropertyCategory, //Category
+	        aPhonebookUid.iUid, //key
+	        RProperty::EInt); //Attr
+ 
+		// Subscribe for the dst event
+		User::LeaveIfError(property.Attach(SyncNotification::KPropertyCategory,aPhonebookUid.iUid));
+		property.Subscribe(aStatus);
+		User::After(1000);	
+		}
+	// some problem encountered
+	if (error)
+		{
+		TRequestStatus* pS = &aStatus;
+		User::RequestComplete(pS, error);
+		}
+ 	CleanupStack::PopAndDestroy(temp);
+ 	}
+ 
+ EXPORT_C void CContactSyncChecker::CompleteNotificationRequestL(TInt aError, TUid aPhonebookUid)
+ 	{
+ 	CContactSyncData* temp = CContactSyncData::NewL();
+ 	CleanupStack::PushL(temp);
+ 	CContactSyncData& settings = temp->DataL();
+  	CContactSyncPhonebookData* phbkData = settings.PhonebookData(aPhonebookUid);
+	if (!phbkData)
+		{
+		User::Invariant();
+		}
+	phbkData->CompleteNotificationRequest(aError);			
+	settings.WriteConfigurationDataL();	
+ 	CleanupStack::PopAndDestroy(temp);
+ 	}
+ 
+EXPORT_C TInt CContactSyncChecker::FetchNotificationErrorL(TUid aPhoneBookUid)
+	{
+ 	CContactSyncData* temp = CContactSyncData::NewL();
+ 	CleanupStack::PushL(temp);
+ 	CContactSyncData& settings = temp->DataL();
+  	CContactSyncPhonebookData* phbkData = settings.PhonebookData(aPhoneBookUid);
+	if (!phbkData)
+		{
+		User::Invariant();
+		}
+	TInt ret = phbkData->ErrorCode();
+	CleanupStack::PopAndDestroy(temp);
+	return ret;
+	}	
+
+EXPORT_C TInt CContactSyncChecker::NotificationPendingCountL(TUid aPhonebookUid)
+/**
+ * Current count of Phonebook Synch State change notifications outstanding
+ * (Note this is across all Views using the test DLL.)
+ */
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+  	CContactSyncPhonebookData* phbkData = settings.PhonebookData(aPhonebookUid);
+	if (!phbkData)
+		{
+		User::Invariant();
+		}
+
+	TInt ret = phbkData->NotificationPendingCount();
+	CleanupStack::PopAndDestroy(temp);
+	return ret;
+	}
+
+
+EXPORT_C void CContactSyncChecker::SetSynchronisedLeaveCodeL(TInt aLeave, TUid aPhonebookUid)
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+  	CContactSyncPhonebookData* phbkData = settings.PhonebookData(aPhonebookUid);
+	if (!phbkData)
+		{
+		User::Invariant();
+		}
+	phbkData->SetSynchronisedLeaveCode(aLeave);
+	settings.WriteConfigurationDataL();	
+	CleanupStack::PopAndDestroy(temp);
+	}
+
+
+EXPORT_C TInt CContactSyncChecker::UpdatePhonebookTemplateIdL(TUid aPhonebookUid, TInt aPhonebookTemplateId)
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	CContactSyncPhonebookData* phbkData = settings.PhonebookData(aPhonebookUid);
+	TInt ret = KErrNotFound;
+	if (phbkData)
+		{
+		phbkData->SetTemplateId(aPhonebookTemplateId);
+		ret = KErrNone;
+		}
+	settings.WriteConfigurationDataL();	
+	CleanupStack::PopAndDestroy(temp);
+	return ret;
+	}
+	
+EXPORT_C TInt CContactSyncChecker::UpdatePhonebookGroupIdL(TUid aPhonebookUid, TInt aPhonebookGroupId)
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	CContactSyncPhonebookData* phbkData = settings.PhonebookData(aPhonebookUid);
+	TInt ret = KErrNotFound;
+
+	if (phbkData)
+		{
+		phbkData->SetGroupId(aPhonebookGroupId);
+		ret = KErrNone;
+		}
+	settings.WriteConfigurationDataL();	
+	CleanupStack::PopAndDestroy(temp);
+	return ret;
+	}
+
+EXPORT_C TInt CContactSyncChecker::SynchroniseIccPhonebookL(CContactDatabase& aDb, TUid aPhonebookUid, TInt aCompletionError, TInt aSyncError)
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	CContactSyncPhonebookData* phbkData = settings.PhonebookData(aPhonebookUid);
+	TInt ret = KErrNotSupported;
+
+	if (phbkData)
+		{
+		ret = phbkData->SynchronisePhonebook(aDb, aCompletionError, aSyncError);
+		}
+	settings.WriteConfigurationDataL();	
+	CleanupStack::PopAndDestroy(temp);
+	return ret;
+	}
+
+/**
+ Synchronise all waiting phonebooks.
+ Also sets all validate responses to KErrNone.
+
+  @param aDb connection to the databse to sync to.
+  @param aCompletionError System error to send to all observers
+  @param aSyncError System error to leave with when Phonebook Sync IsSynchronisedL() API is called.
+ */
+EXPORT_C TInt CContactSyncChecker::SynchroniseIccAllPhonebooksL(CContactDatabase& aDb, TInt aCompletionError, TInt aSyncError)
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	RPointerArray<CContactSyncPhonebookData>& perPhbkData = settings.PerPhonebookData();
+	const TInt phbkCount = perPhbkData.Count();
+	TInt error(KErrNone);
+
+	if ((aCompletionError == KErrNone) && (aSyncError == KErrNone))
+		{
+		SetValidateResponseL(MContactSynchroniser::ERead, KErrNone);
+		SetValidateResponseL(MContactSynchroniser::EEdit, KErrNone);
+		SetValidateResponseL(MContactSynchroniser::ESearch, KErrNone);
+		SetValidateWriteResponseL(KErrNone);
+		SetDeleteContactResponseL(KErrNone);
+		}
+
+	// search through phonebook list
+	for (TInt k = 0; (k < phbkCount) && (error == KErrNone); ++k)
+		{
+		// synchronise all waiting phonebooks
+		if (perPhbkData[k]->SynchroniseRequired())
+			{
+			error = perPhbkData[k]->SynchronisePhonebook(aDb, aCompletionError, aSyncError);
+			}
+		}
+	settings.WriteConfigurationDataL();	
+	CleanupStack::PopAndDestroy(temp);
+
+	return error;
+	}
+
+
+EXPORT_C TInt CContactSyncChecker::AddContactToPhonebookL(TUid aPhonebookUid, const TDesC& aName, const TDesC& aNumber)
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	CContactSyncPhonebookData* phbkData = settings.PhonebookData(aPhonebookUid);
+	TInt ret = KErrNotSupported;
+	if (phbkData)
+		{
+		TRAP(ret, phbkData->AddPhonebookContactL(aName, aNumber));
+		}
+	settings.WriteConfigurationDataL();	
+	CleanupStack::PopAndDestroy(temp);	
+	return ret;
+	}
+	
+EXPORT_C TInt CContactSyncChecker::ResetSyncIccPhonebookL(TUid aPhonebookUid, TBool aResetTemplateAndGroupIds)
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	CContactSyncPhonebookData* phbkData = settings.PhonebookData(aPhonebookUid);
+	TInt ret = KErrNotSupported;
+
+	if (phbkData)
+		{
+		phbkData->ResetSynchronised(aResetTemplateAndGroupIds);
+		ret = KErrNone;
+		}
+	settings.WriteConfigurationDataL();	
+	CleanupStack::PopAndDestroy(temp);	
+	return ret;
+	}
+	
+EXPORT_C TInt CContactSyncChecker::ResetSyncIccAllPhonebooksL(TBool aResetTemplateAndGroupIds)
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	RPointerArray<CContactSyncPhonebookData>& perPhbkData = settings.PerPhonebookData();
+	const TInt phbkCount = perPhbkData.Count();
+
+	// search through phonebook list
+	for (TInt k = 0; k < phbkCount; ++k)
+		{
+		// synchronise all waiting phonebooks
+		perPhbkData[k]->ResetSynchronised(aResetTemplateAndGroupIds);
+		}
+	settings.WriteConfigurationDataL();	
+	CleanupStack::PopAndDestroy(temp);	
+	return KErrNone;
+	}
+	
+// Configure simulation for GSM Phonebook
+EXPORT_C TInt CContactSyncChecker::SetGsmPhonebookL()
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	TInt error = KErrNone;
+	if (settings.PerPhonebookData().Count() != 0)
+		{
+		// too late - the phonebook list has already been set
+		error = KErrGeneral;
+		}
+		else
+		{
+		TRAP(error, settings.AllocPhonebookDataL(KUidIccGlobalAdnPhonebook));		
+		}
+	settings.WriteConfigurationDataL();	
+	// create object for GSM ADN phonebook
+	CleanupStack::PopAndDestroy(temp);	
+	return error;
+	}
+	
+// Configure simulation for USIM (UMTS/WCDMA) Phonebook
+EXPORT_C TInt CContactSyncChecker::SetUsimPhonebookL()
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	TInt error = KErrNone;
+
+	if (settings.PerPhonebookData().Count() != 0)
+		{
+		// too late - the phonebook list has already been set
+		error = KErrGeneral;
+		}
+		else
+		{
+		// create object for USIM App ADN phonebook
+		TRAP(error, settings.AllocPhonebookDataL(KUidUsimAppAdnPhonebook));	
+		}
+	settings.WriteConfigurationDataL();	
+	CleanupStack::PopAndDestroy(temp);	
+	return error;
+	}
+	
+// Configure custom Phonebook simulation
+EXPORT_C TInt CContactSyncChecker::SetPhonebookListL(const RArray<TUid> aNewPhonebookList)
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	TInt error = KErrNone;
+	if (settings.PerPhonebookData().Count() != 0)
+		{
+		// too late - the phonebook list has already been set
+		error = KErrGeneral;
+		}
+		else
+		{
+		TInt const phbkCount = aNewPhonebookList.Count();
+		error = KErrNone;
+
+		for (TInt k = 0; (k < phbkCount) && !error; ++k)
+			{
+			// create object for requested phonebook
+			TRAP(error, settings.AllocPhonebookDataL(aNewPhonebookList[k]));
+			}			
+		}
+	settings.WriteConfigurationDataL();	
+	CleanupStack::PopAndDestroy(temp);		
+	return error;
+	}
+
+// Get phonebook list
+EXPORT_C TInt CContactSyncChecker::PhonebookListL(RArray<TUid>& aPhonebookList)
+	{
+	CContactSyncData* temp = CContactSyncData::NewL();
+	CleanupStack::PushL(temp);
+	CContactSyncData& settings = temp->DataL();
+	RPointerArray<CContactSyncPhonebookData>& perPhbkData = settings.PerPhonebookData();
+	const TInt phbkCount = perPhbkData.Count();
+	TInt ret = KErrNone;
+	if (phbkCount == 0)
+		{
+		// too early - the phonebook list has not been set
+		ret = KErrNotReady;
+		}
+		else
+		{
+		// copy/create phonebook list
+		aPhonebookList.Reset();
+		for (TInt k = 0; k < phbkCount; ++k)
+			{
+			if (aPhonebookList.Append(perPhbkData[k]->PhonebookUid()) != KErrNone)
+				{
+				// error
+				aPhonebookList.Reset();
+				ret = KErrNoMemory;
+				break;
+				}
+			}
+			
+		}
+	CleanupStack::PopAndDestroy(temp);		
+	return ret;
+	}
+
+