--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines_old/contactsmodel/tsrc/TestSyncPlugIn/cntsyncchecker.cpp Tue Aug 31 15:05:21 2010 +0300
@@ -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;
+ }
+
+