--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/serviceproviders/sapi_contacts_vpbk/tsrc/dev/tcontacts_sync/src/tcontacts_sync_blocks.cpp Fri Jul 03 15:51:24 2009 +0100
@@ -0,0 +1,3153 @@
+/*
+* Copyright (c) 2002 - 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: ?Description
+*
+*/
+
+
+
+
+// INCLUDE FILES
+#include <e32svr.h>
+#include <StifParser.h>
+#include <Stiftestinterface.h>
+#include <VPbkEng.rsg>
+
+#include <MVPbkContactFieldTextData.h>
+#include <MVPbkContactStoreList.h>
+#include <MVPbkContactOperationBase.h>
+#include <MVPbkContactLink.h>
+#include <CVPbkContactLinkArray.h>
+#include <MVPbkContactGroup.h>
+#include <utf.h>
+
+#include "tcontacts_sync.h"
+#include "singlecontact.h"
+
+// CONSTANTS
+_LIT(KError,"Error code is");
+_LIT(KSuccess,"Successful");
+_LIT(KNewLine,"\n");
+_LIT(KServiceOpen,"Service handle created");
+_LIT(KServiceClose,"Service handle deleted");
+_LIT(KPhoneNumber,"9886431364");
+ _LIT(KGroup1,"Test1");
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CContactsUT::Delete
+// Delete here all resources allocated and opened from test methods.
+// Called from destructor.
+// -----------------------------------------------------------------------------
+//
+void CContactsUT::Delete()
+ {
+
+ }
+
+// -----------------------------------------------------------------------------
+// CContactsUT::RunMethodL
+// Run specified method. Contains also table of test mothods and their names.
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::RunMethodL(
+ CStifItemParser& aItem )
+ {
+
+ static TStifFunctionInfo const KFunctions[] =
+ {
+ ENTRY( "Add_contact_sapi", CContactsUT::AddContactSAPIL ),
+ ENTRY( "Delete_contact_sapi", CContactsUT::DeleteContactSAPIL ),
+ ENTRY( "Modify_contact_sapi", CContactsUT::ModifyContactSAPIL ),
+ ENTRY( "Import_contact_sapi", CContactsUT::ImportContactSAPIL ),
+ ENTRY( "Export_contact_sapi", CContactsUT::ExportContactSAPIL ),
+ ENTRY( "Getlist_delete_contact", CContactsUT::GetListDeleteContactL ),
+ ENTRY( "Add_getlist_contact", CContactsUT::AddContactGetListL ),
+ ENTRY( "Get_group", CContactsUT::GetGroupsL ),
+ ENTRY( "Get_contact", CContactsUT::GetContactsL ),
+ ENTRY( "Get_database", CContactsUT::GetDatabaseL ),
+ ENTRY( "Add_contact", CContactsUT::AddL ),
+ ENTRY( "Add_group", CContactsUT::AddGroupL ),
+ ENTRY( "Modify_contact", CContactsUT::ModifyL ),
+ ENTRY( "Modify_group", CContactsUT::ModifyGroupL ),
+ ENTRY( "Delete_contact", CContactsUT::DeleteContactL ),
+ ENTRY( "Delete_group", CContactsUT::DeleteGroupL ),
+ ENTRY( "Organise_add", CContactsUT::OrganiseAddL ),
+ ENTRY( "Organise_delete", CContactsUT::OrganiseDeleteL ),
+ ENTRY( "Import", CContactsUT::ImportL ),
+ ENTRY( "Export", CContactsUT::ExportL ),
+ };
+
+ const TInt count = sizeof( KFunctions ) /
+ sizeof( TStifFunctionInfo );
+
+ return RunInternalL( KFunctions, count, aItem );
+
+ }
+
+
+void CContactsUT::HandleReturnValue( TOperationEvent /*aEvent*/, const TInt& aError, TInt /*aTransId*/ )
+ {
+ CActiveScheduler::Stop();
+ _LIT(KFunc,"In Handle Return Value\n");
+ iLog->Log(KFunc);
+ iErr = aError;
+ TBuf<5> buf;
+ buf.Num(aError);
+ iLog->Log(KError);
+ iLog->Log(buf);
+ iLog->Log(KNewLine);
+ }
+
+void CContactsUT::HandleReturnIter( const TInt& aError, CContactIter* aIter, TInt /*aTransId*/ )
+ {
+ CActiveScheduler::Stop();
+ _LIT(KFunc,"In Handle Return Iter\n");
+ iLog->Log(KFunc);
+ iErr = aError;
+ TBuf<5> buf;
+ buf.Num(aError);
+ iLog->Log(KError);
+ iLog->Log(buf);
+ iLog->Log(KNewLine);
+
+ HBufC8* idBuf = NULL;
+ _LIT8(KNumber,"MobilePhoneGen");
+ while(ETrue)
+ {
+ aIter->NextL(iSingleContact,idBuf);
+ if(!iSingleContact)
+ {
+ break;
+ }
+ CleanupStack::PushL(idBuf);
+
+
+ TInt count(iSingleContact->FieldCount());
+ CSingleContactField* field = NULL;
+ while(count)
+ {
+ TPtrC8 fieldKey;
+ TPtrC label;
+ TPtrC value;
+ field = iSingleContact->FieldAt(--count);
+ field->GetFieldDataL(fieldKey,label,value);
+ if(!(fieldKey.Compare(KNumber)) && !(value.Compare(KPhoneNumber)))
+ {
+ CleanupStack::Pop(idBuf);
+ delete aIter;
+ return; //NOTE
+ }
+
+ }
+ CleanupStack::PopAndDestroy(idBuf);
+ delete iSingleContact;
+ iSingleContact = NULL;
+ }
+ delete aIter;
+ }
+ /*
+ if(EGetContactDelete == iOperation )
+ {
+ iOperation = ENone;
+ CSingleContact* singleContact = NULL;
+ HBufC8* buf = NULL;
+ TInt count = 0;
+ while(ETrue)
+ {
+ aIter->NextL(singleContact,buf);
+ if(!singleContact)
+ {
+ break;
+ }
+ iBuffer = buf;
+ // delete buf;
+ delete singleContact;
+ break;
+ }
+ }
+ if(iOperation == EContact)
+ {
+ iOperation = ENone;
+
+ CSingleContact* singleContact = NULL;
+ HBufC8* buf = NULL;
+
+ _LIT(KPhone,"560087");
+ _LIT8(KField,"MobilePhoneGen");
+
+ while(ETrue)
+ {
+ aIter->NextL(singleContact,buf);
+ CleanupStack::PushL(singleContact);
+ CleanupStack::PushL(buf);
+ if(!singleContact)
+ {
+ break;
+ }
+
+
+ if(!buf->Compare(*iBuffer))
+ {
+ TInt count(singleContact->FieldCount());
+ CSingleContactField* field = NULL;
+ while(count)
+ {
+ TBuf8<50> fieldKey;
+ TBuf<50> label;
+ TBuf<50> value;
+ field = singleContact->FieldAt(--count);
+ field->GetFieldDataL(fieldKey,label,value);
+ if(!fieldKey.Compare(KField))
+ {
+ field->SetFieldParamsL(KField,KNullDesC,KPhone);
+ iLog->Log(_L("Phone Contact Field modified \n"));
+ iServiceHandle->AddL(this,0,singleContact);
+ iLog->Log(_L("AddL called\n"));
+ iLog->Log(_L("Start Active Scheduler\n"));
+ CActiveScheduler::Start();
+ break;
+ }
+ }
+ }
+
+ CleanupStack::PopAndDestroy(buf);
+ CleanupStack::PopAndDestroy(singleContact);
+ }
+ }
+ if(EGetContact == iOperation )
+ {
+ iOperation = ENone;
+ //iErr = KErrGeneral;
+ _LIT8(KFirstName,"FirstName");
+ _LIT(KName,"Kats");
+ CSingleContact* singleContact = NULL;
+ HBufC8* buf = NULL;
+ TInt count = 0;
+ while(ETrue)
+ {
+ aIter->NextL(singleContact,buf);
+ if(!singleContact)
+ {
+ break;
+ }
+ ++count;
+ TInt count(singleContact->FieldCount());
+ while(count)
+ {
+ CSingleContactField* field = singleContact->FieldAt(--count);
+ TBuf8<256> fieldKey;
+ TBuf<256> label;
+ TBuf<256> value;
+ field->GetFieldDataL(fieldKey,label,value);
+ if (fieldKey == KFirstName && value == KName)
+ {
+ iErr = KErrNone;
+ }
+ // delete field;
+ }
+ delete singleContact;
+ }
+ }
+
+ if(EGetGroup == iOperation )
+ {
+ iOperation = ENone;
+ CSingleContact* singleContact = NULL;
+ HBufC8* buf = NULL;
+ TInt count = 0;
+ while(ETrue)
+ {
+ aIter->NextL(singleContact,buf);
+ iBuffer = buf;
+ if(!singleContact)
+ {
+ break;
+ }
+ ++count;
+ TInt fields(singleContact->FieldCount());
+ while(fields)
+ {
+ CSingleContactField* field = singleContact->FieldAt(--fields);
+ TBuf<256> groupId;
+ RPointerArray<HBufC8> array;
+ field->GetFieldDataL(groupId,array);
+ TInt contacts(array.Count());
+ //array->Reset();
+ }
+
+ }
+ }
+ delete aIter;
+ }*/
+
+void CContactsUT::HandleRetrieveContact( MVPbkStoreContact* /*aStoreContact*/, TInt /*aTransId*/ )
+ {
+ CActiveScheduler::Stop();
+ _LIT(KFunc,"In Handle Retrieve Contact\n");
+ iLog->Log(KFunc);
+ }
+
+void CContactsUT::ContactOperationCompleted(TContactOpResult aResult)
+ {
+ CActiveScheduler::Stop();
+ _LIT(KFunc,"In ContactOperationCompleted \n");
+ iLog->Log(KFunc);
+ iErr = KErrNone;
+ TBuf<5> buf;
+ buf.Num(aResult.iOpCode);
+ iLog->Log(KSuccess);
+ iLog->Log(buf);
+ iLog->Log(KNewLine);
+ switch(iOperation)
+ {/*
+ case EContact: delete iStoreContact;
+ iStoreContact = NULL;
+ break;*/
+ case EGroup: delete iGroup;
+ iGroup = NULL;
+ break;
+ }
+ iOperation = ENone;
+ }
+void CContactsUT::ContactOperationFailed
+ (TContactOp /*aOpCode*/, TInt aErrorCode, TBool /*aErrorNotified*/)
+ {
+ CActiveScheduler::Stop();
+ _LIT(KFunc,"In ContactOperationFailed \n");
+ iLog->Log(KFunc);
+ iErr = aErrorCode;
+ TBuf<5> buf;
+ buf.Num(aErrorCode);
+ iLog->Log(KError);
+ iLog->Log(buf);
+ iLog->Log(KNewLine);
+ switch(iOperation)
+ {
+ case EContact:/* delete iStoreContact;
+ iStoreContact = NULL;
+ break;*/
+ case EGroup: delete iGroup;
+ iGroup = NULL;
+ break;
+ }
+ iOperation = ENone;
+ }
+
+void CContactsUT::FindCompleteL( MVPbkContactLinkArray* aResults )
+ {
+ CActiveScheduler::Stop();
+ _LIT(KFunc,"In FindCompleteL \n");
+ iLog->Log(KFunc);
+ iErr = KErrNone;
+ iFindResults = aResults;
+ iLog->Log(KSuccess);
+ }
+void CContactsUT::FindFailed( TInt aError )
+ {
+ CActiveScheduler::Stop();
+ _LIT(KFunc,"In FindFailed \n");
+ iLog->Log(KFunc);
+ iErr = aError;
+ TBuf<5> buf;
+ buf.Num(aError);
+ iLog->Log(KError);
+ iLog->Log(buf);
+ iLog->Log(KNewLine);
+ }
+
+void CContactsUT::VPbkSingleContactOperationComplete(
+ MVPbkContactOperationBase& aOperation,
+ MVPbkStoreContact* aContact )
+ {
+ CActiveScheduler::Stop();
+ _LIT(KFunc,"In VPbkSingleContactOperationComplete \n");
+ iLog->Log(KFunc);
+ iErr = KErrNone;
+
+ if(iOperation == EVCard)
+ {
+ iDestStream.CommitL();
+ delete iOp;
+ iOp = NULL;
+ iDestStream.Close();
+ delete iResult;
+ iResult = NULL;
+ }
+ else if(iOperation == EVCardEx)
+ {
+ delete iOp;
+ iOp = NULL;
+ }
+ else
+ {
+ delete iStoreContact;
+ iStoreContact = NULL;
+ iStoreContact = aContact;
+ if( iOp == &aOperation )
+ {
+ delete iOp;
+ iOp = NULL;
+ }
+ }
+ iOperation = ENone;
+ iLog->Log(KSuccess);
+ }
+
+
+void CContactsUT::VPbkSingleContactOperationFailed(
+ MVPbkContactOperationBase& aOperation,
+ TInt aError )
+ {
+ CActiveScheduler::Stop();
+ _LIT(KFunc,"In VPbkSingleContactOperationFailed \n");
+ iLog->Log(KFunc);
+ iErr = aError;
+ ;
+ if(iOperation == EVCard)
+ {
+ iDestStream.CommitL();
+ delete iOp;
+ iOp = NULL;
+ iDestStream.Close();
+ delete iBuffer;
+ iBuffer = NULL;
+ delete iResult;
+ iResult = NULL;
+ }
+ else if(iOperation == EVCardEx)
+ {
+ delete iOp;
+ iOp = NULL;
+ }
+ else
+ {
+ delete iStoreContact;
+ iStoreContact = NULL;
+ if( iOp == &aOperation )
+ {
+ delete iOp;
+ iOp = NULL;
+ }
+ }
+ TBuf<5> buf;
+ buf.Num(aError);
+ iLog->Log(KError);
+ iLog->Log(buf);
+ iLog->Log(KNewLine);
+
+ iOperation = ENone;
+ }
+
+void CContactsUT::StepComplete(
+ MVPbkContactOperationBase& /*aOperation*/,
+ TInt /*aStepSize*/ )
+ {
+ _LIT(KFunc,"In StepComplete \n");
+ iLog->Log(KFunc);
+ iLog->Log(KSuccess);
+ iLog->Log(KNewLine);
+ }
+
+TBool CContactsUT::StepFailed(
+ MVPbkContactOperationBase& /*aOperation*/,
+ TInt /*aStepSize*/, TInt /*aError*/ )
+ {
+ _LIT(KFunc,"In StepFailed \n");
+ iLog->Log(KFunc);
+ return EFalse;
+ }
+
+void CContactsUT::OperationComplete(
+ MVPbkContactOperationBase& /*aOperation*/ )
+ {
+ CActiveScheduler::Stop();
+ _LIT(KFunc,"In OperationComplete \n");
+ iLog->Log(KFunc);
+ iErr = KErrNone;
+ iLog->Log(KSuccess);
+ iLog->Log(KNewLine);
+ }
+
+
+//Delete all contacts
+void CContactsUT::DeleteAllL()
+ {
+ // Print to UI
+ _LIT( KContactsTest, "ContactsUT" );
+ _LIT( KExample, "In DeleteAllL" );
+ TestModuleIf().Printf( 0, KContactsTest, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ iErr = KErrNone;
+
+ __UHEAP_MARK;
+ iOp = iContactManager->MatchPhoneNumberL(
+ KPhoneNumber, KPhoneNumber().Length(), *this );
+ CActiveScheduler::Start();
+ delete iOp;
+ iOp = NULL;
+
+ TInt count(iFindResults->Count());
+ iContactToDelete = CVPbkContactLinkArray::NewLC();
+ while(count)
+ {
+ MVPbkContactLink* link = iFindResults->At(--count).CloneLC();
+ iContactToDelete->AppendL(link);
+ CleanupStack::Pop();
+ }
+ delete iFindResults;
+ iFindResults = NULL;
+
+ iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+ CActiveScheduler::Start();
+ delete iOp;
+ iOp = NULL;
+ CleanupStack::PopAndDestroy(iContactToDelete);
+ iContactToDelete = NULL;
+
+
+ __UHEAP_MARKEND;
+ }
+
+//Add 1 contact
+void CContactsUT::AddOneContactL(TDesC& aName)
+ {
+ // Print to UI
+ _LIT( KContactsTest, "ContactsUT" );
+ _LIT( KExample, "In AddOneContactL" );
+ TestModuleIf().Printf( 0, KContactsTest, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ iErr = KErrNone;
+
+ __UHEAP_MARK;
+ CVPbkFieldTypeRefsList* fieldTypeRefList = CVPbkFieldTypeRefsList::NewL();
+ CleanupStack::PushL(fieldTypeRefList);
+
+ fieldTypeRefList->AppendL(
+ *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME ) );
+ fieldTypeRefList->AppendL(
+ *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_MOBILEPHONEGEN ) );
+
+ // Create first contact
+ iStoreContact = iStore->CreateNewContactLC();
+
+ // Create contact field for contact
+ MVPbkStoreContactField* field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 0 ) );
+ // Set contact field data
+ (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( aName );
+ // Add the contact field to contact
+ iStoreContact->AddFieldL( field );
+ CleanupStack::Pop(); // field
+
+ // Create contact field for contact
+ field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 1 ) );
+ // Set contact field data
+ (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KPhoneNumber );
+ // Add the contact field to contact
+ iStoreContact->AddFieldL( field );
+ CleanupStack::Pop(); // field
+
+ // Commit the new created contact to contact store
+ iStoreContact->CommitL( *this );
+ CActiveScheduler::Start();
+ CleanupStack::PopAndDestroy(); // iStoreContact
+ iStoreContact = NULL;
+ CleanupStack::PopAndDestroy(fieldTypeRefList);
+ __UHEAP_MARKEND;
+ }
+
+//Check for contact
+void CContactsUT::CheckContactsL(TInt& aCount,RPointerArray<TDesC8>& aIdArray)
+ {
+ // Print to UI
+ _LIT( KContactsTest, "ContactsUT" );
+ _LIT( KExample, "In CheckContactsL" );
+ TestModuleIf().Printf( 0, KContactsTest, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ iErr = KErrNone;
+
+ //__UHEAP_MARK;
+ iOp = iContactManager->MatchPhoneNumberL(
+ KPhoneNumber, KPhoneNumber().Length(), *this );
+ CActiveScheduler::Start();
+ delete iOp;
+ iOp = NULL;
+
+ aCount = iFindResults->Count();
+ TInt count(aCount);
+ while(count)
+ {
+ aIdArray.AppendL((const_cast<MVPbkContactLink&>(iFindResults->At(--count))).PackLC());
+ CleanupStack::Pop();
+ }
+ delete iFindResults;
+ iFindResults = NULL;
+ // __UHEAP_MARKENDC(aCount);
+ }
+
+// -----------------------------------------------------------------------------
+// CContactsUT::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::AddContactSAPIL( CStifItemParser& aItem )
+ {
+ // Print to UI
+ _LIT( KContactsTest, "ContactsUT" );
+ _LIT( KExample, "In AddContactSAPIL" );
+ TestModuleIf().Printf( 0, KContactsTest, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ TInt i = 0;
+ TPtrC string;
+ _LIT( KParam, "Param[%i]: %S" );
+ while ( aItem.GetNextString ( string ) == KErrNone )
+ {
+ TestModuleIf().Printf( i, KContactsTest,
+ KParam, i, &string );
+ i++;
+ }
+
+ iErr = KErrNone;
+
+ DeleteAllL();
+
+ /**Add contact using SAPI Core class*/
+
+ _LIT8(KFirstName,"FirstName");
+ _LIT(KName,"Sikandar");
+ _LIT8(KNumber,"MobilePhoneGen");
+
+ __UHEAP_MARK;
+ //instantiate service class
+ CContactService* serviceHandle = CContactService::NewL();
+ CleanupStack::PushL(serviceHandle);
+ iLog->Log( KServiceOpen );
+
+ CSingleContact* singleContact = CSingleContact::NewL();
+ CleanupStack::PushL(singleContact);
+ iLog->Log(_L("single Contact created\n"));
+
+ CSingleContactField* nameContactField = CSingleContactField::NewL();
+ CleanupStack::PushL(nameContactField);
+ iLog->Log(_L("Name Contact Field created \n"));
+
+ CSingleContactField* phoneContactField = CSingleContactField::NewL();
+ CleanupStack::PushL(phoneContactField);
+ iLog->Log(_L("Phone Contact Field created \n"));
+
+ nameContactField->SetFieldParamsL(KFirstName,KNullDesC,KName);
+ singleContact->AddFieldToContactL(nameContactField);
+ iLog->Log(_L("Name Contact Field added \n"));
+
+ phoneContactField->SetFieldParamsL(KNumber,KNullDesC,KPhoneNumber);
+ singleContact->AddFieldToContactL(phoneContactField);
+ iLog->Log(_L("Phone Contact Field added \n"));
+
+ serviceHandle->AddL(singleContact);
+ iLog->Log(_L("AddL called\n"));
+ iLog->Log(_L("Start Active Scheduler\n"));
+
+ CleanupStack::Pop(phoneContactField);//singleContactField
+ CleanupStack::Pop(nameContactField);//singleContactField
+ CleanupStack::PopAndDestroy(singleContact);//singleContact
+ CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle
+ iLog->Log( KServiceClose );
+ __UHEAP_MARKEND;
+ /**end */
+
+ TInt count;
+ RPointerArray<TDesC8> idArray;
+ CheckContactsL(count,idArray);
+ if(count != 1)
+ {
+ iErr = KErrGeneral;
+ }
+ idArray.ResetAndDestroy();
+
+ DeleteAllL();
+ return iErr;
+ }
+
+// -----------------------------------------------------------------------------
+// CContactsUT::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::DeleteContactSAPIL( CStifItemParser& aItem )
+ {
+ // Print to UI
+ _LIT( KContactsTest, "ContactsUT" );
+ _LIT( KExample, "In DeleteContactSAPIL" );
+ TestModuleIf().Printf( 0, KContactsTest, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ TInt i = 0;
+ TPtrC string;
+ _LIT( KParam, "Param[%i]: %S" );
+ while ( aItem.GetNextString ( string ) == KErrNone )
+ {
+ TestModuleIf().Printf( i, KContactsTest,
+ KParam, i, &string );
+ i++;
+ }
+
+ iErr = KErrNone;
+
+ DeleteAllL();
+ _LIT(KName,"SpiderMan");
+ TPtrC name(KName);
+ AddOneContactL(name);
+
+ TInt count(0);
+ RPointerArray<TDesC8> idArray;
+ CleanupClosePushL(idArray);
+ CheckContactsL(count,idArray);
+ if(count != 1)
+ {
+ return KErrGeneral;
+ }
+
+ /**Delete using SAPI core class*/
+
+ __UHEAP_MARK;
+ CContactService* serviceHandle = CContactService::NewL();
+ CleanupStack::PushL(serviceHandle);
+ iLog->Log( KServiceOpen );
+
+ serviceHandle->DeleteL(idArray);
+ iLog->Log(_L("DeleteL called\n"));
+ iLog->Log(_L("Start Active Scheduler\n"));
+ //CActiveScheduler::Start();
+
+ CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle
+ iLog->Log( KServiceClose );
+ __UHEAP_MARKEND;
+ /**end*/
+ CleanupStack::Pop(&idArray);
+ idArray.ResetAndDestroy();
+
+ RPointerArray<TDesC8> idArray1;
+ CleanupClosePushL(idArray1);
+ CheckContactsL(count,idArray1);
+ if(count)
+ {
+ iErr = KErrGeneral;
+ }
+ CleanupStack::Pop(&idArray1);
+ idArray.ResetAndDestroy();
+ return iErr;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CContactsUT::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::ModifyContactSAPIL( CStifItemParser& aItem )
+ {
+ // Print to UI
+ _LIT( KContactsTest, "ContactsUT" );
+ _LIT( KExample, "In ModifyContactSAPIL" );
+ TestModuleIf().Printf( 0, KContactsTest, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ TInt i = 0;
+ TPtrC string;
+ _LIT( KParam, "Param[%i]: %S" );
+ while ( aItem.GetNextString ( string ) == KErrNone )
+ {
+ TestModuleIf().Printf( i, KContactsTest,
+ KParam, i, &string );
+ i++;
+ }
+
+ iErr = KErrNone;
+
+ DeleteAllL();
+ _LIT(KName,"SuperMan");
+ TPtrC name(KName);
+ AddOneContactL(name);
+
+ TInt count(0);
+ RPointerArray<TDesC8> idArray;
+ CleanupClosePushL(idArray);
+ CheckContactsL(count,idArray);
+ if(count != 1)
+ {
+ return KErrGeneral;
+ }
+
+ /**Get using SAPI core class*/
+ __UHEAP_MARK;
+ CContactService* serviceHandle = CContactService::NewL();
+ CleanupStack::PushL(serviceHandle);
+ iLog->Log( KServiceOpen );
+
+ serviceHandle->GetListL(this,0,EContacts,*idArray[0]);
+ iLog->Log(_L("GetListL called\n"));
+ iLog->Log(_L("Start Active Scheduler\n"));
+ CActiveScheduler::Start();
+
+ if(!iSingleContact)
+ {
+ return KErrGeneral;
+ }
+
+ _LIT(KName1,"SpiderMan");
+ _LIT8(KFirstName,"FirstName");
+ CSingleContactField* field = NULL;
+ TInt fieldCount(iSingleContact->FieldCount());
+ while(fieldCount)
+ {
+ TPtrC8 fieldKey;
+ TPtrC label;
+ TPtrC value;
+ field = iSingleContact->FieldAt(--fieldCount);
+ field->GetFieldDataL(fieldKey,label,value);
+ if( !fieldKey.Compare(KFirstName) && !value.Compare(KName))
+ {
+ field->SetFieldParamsL(KFirstName,KNullDesC,KName1);
+ iLog->Log(_L("Phone Contact Field modified \n"));
+ break;
+ }
+ }
+ //
+ //MVPbkContactLinkArray* linkArray = iContactManager->CreateLinksLC(iSingleContact->GetContactId());
+ //iOp = iContactManager->RetrieveContactL(linkArray->At(0),*this);
+ //CActiveScheduler::Start();
+ //CleanupStack::Pop();
+ //
+ __UHEAP_MARK;
+ serviceHandle->AddL(this,0,iSingleContact);
+ iLog->Log(_L("AddL called\n"));
+ iLog->Log(_L("Start Active Scheduler\n"));
+ CActiveScheduler::Start();
+ __UHEAP_MARKEND;
+
+ delete iSingleContact;
+ iSingleContact = NULL;
+
+ CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle
+ iLog->Log( KServiceClose );
+ __UHEAP_MARKEND;
+ /**end*/
+
+
+ CleanupStack::Pop(&idArray);
+ idArray.ResetAndDestroy();
+
+ RPointerArray<TDesC8> idArray1;
+ CleanupClosePushL(idArray1);
+ CheckContactsL(count,idArray1);
+ if(count != 1)
+ {
+ iErr = KErrGeneral;
+ }
+ CleanupStack::Pop();
+ idArray1.ResetAndDestroy();
+ //to implement ..checking name
+ return iErr;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CContactsUT::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::ImportContactSAPIL( CStifItemParser& aItem )
+ {
+ // Print to UI
+ _LIT( KContactsTest, "ContactsUT" );
+ _LIT( KExample, "In ImportContactSAPIL" );
+ TestModuleIf().Printf( 0, KContactsTest, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ TInt i = 0;
+ TPtrC string;
+ _LIT( KParam, "Param[%i]: %S" );
+ while ( aItem.GetNextString ( string ) == KErrNone )
+ {
+ TestModuleIf().Printf( i, KContactsTest,
+ KParam, i, &string );
+ i++;
+ }
+
+ iErr = KErrNone;
+ _LIT(KFileName,"c:\\vcardim.vcf");
+
+ /* DeleteAllL();
+
+ _LIT(KName,"SuperMan");
+ TPtrC name(KName);
+ AddOneContactL(name);
+
+ TInt count(0);
+ RPointerArray<TDesC8> idArray;
+ CleanupClosePushL(idArray);
+ CheckContactsL(count,idArray);
+ if(count != 1)
+ {
+ return KErrGeneral;
+ }
+
+ //__UHEAP_MARK;
+ MVPbkContactLinkArray* linkArray = iContactManager->CreateLinksLC(*idArray[0]);
+ iVCardEngine = CVPbkVCardEng::NewL( *iContactManager );
+ // Create the buffer to store the contact
+ iBuffer = HBufC8::NewL( 1024 );
+ TPtr8 bufferPtr( iBuffer->Des() );
+ iDestStream.Open( bufferPtr );
+ //export the contact from MVPbkContactLink
+ // __UHEAP_MARK;
+ iOp = iVCardEngine->ExportVCardL( iDestStream, linkArray->At(0), *this );
+ CActiveScheduler::Start();
+
+ // __UHEAP_MARKEND;
+ if( !iErr )
+ {
+ iDestStream.CommitL();
+ }
+
+ iDestStream.Close();
+ if(iBuffer)
+ {
+ RFile file;
+ CleanupClosePushL(file);
+ file.Replace(iRfs,KFileName,EFileWrite);
+ file.Write(0,*iBuffer);
+ CleanupStack::PopAndDestroy(&file);
+ }
+ delete iBuffer;
+ iBuffer = NULL;
+ delete iVCardEngine;
+ iVCardEngine = NULL;
+ CleanupStack::PopAndDestroy();//linkArray
+ //__UHEAP_MARKEND;
+
+ CleanupStack::Pop(&idArray);
+ idArray.ResetAndDestroy();
+ DeleteAllL();
+ */
+ DeleteAllL();
+ __UHEAP_MARK;
+ CContactService* serviceHandle = CContactService::NewL();
+ CleanupStack::PushL(serviceHandle);
+ iLog->Log( KServiceOpen );
+
+ TFileName importFile(KFileName);
+
+ serviceHandle->ImportVCardToStoreL(this,0,importFile);
+ iLog->Log(_L("ImportVCardToStoreL called\n"));
+ iLog->Log(_L("Start Active Scheduler\n"));
+ CActiveScheduler::Start();
+
+ CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle
+ iLog->Log( KServiceClose );
+ __UHEAP_MARKEND;
+
+ TInt count = 0;
+ RPointerArray<TDesC8> idArray;
+ CleanupClosePushL(idArray);
+ CheckContactsL(count,idArray);
+ if(count != 1)
+ {
+ return KErrGeneral;
+ }
+ CleanupStack::Pop(&idArray);
+ idArray.ResetAndDestroy();
+ return iErr;
+ }
+
+// -----------------------------------------------------------------------------
+// CContactsUT::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::ExportContactSAPIL( CStifItemParser& aItem )
+ {
+ // Print to UI
+ _LIT( KContactsTest, "ContactsUT" );
+ _LIT( KExample, "In ExportContactSAPIL" );
+ TestModuleIf().Printf( 0, KContactsTest, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ TInt i = 0;
+ TPtrC string;
+ _LIT( KParam, "Param[%i]: %S" );
+ while ( aItem.GetNextString ( string ) == KErrNone )
+ {
+ TestModuleIf().Printf( i, KContactsTest,
+ KParam, i, &string );
+ i++;
+ }
+
+ iErr = KErrNone;
+ _LIT(KFileName,"c:\\vcardim.vcf");
+ _LIT(KFileName1,"c:\\vcardim1.vcf");
+
+ DeleteAllL();
+
+ _LIT(KName,"SuperMan");
+ TPtrC name(KName);
+ AddOneContactL(name);
+
+ _LIT(KName1,"SpiderMan");
+ TPtrC name1(KName1);
+ AddOneContactL(name1);
+
+ TInt count(0);
+ RPointerArray<TDesC8> idArray;
+ CleanupClosePushL(idArray);
+ CheckContactsL(count,idArray);
+ TInt ret = iRfs.Delete(KFileName);
+ // ret = iRfs.Delete(KFileName1);
+ /* if(count != 1)
+ {
+ return KErrGeneral;
+ }*/
+
+ /* __UHEAP_MARK;
+ RFile writeStream;
+ CleanupClosePushL(writeStream);
+ User::LeaveIfError(writeStream.Create(iRfs,KFileName,EFileWrite));
+ while(count)
+ {
+ writeStream.Write(*idArray[--count]);
+ }
+ CleanupStack::PopAndDestroy(&writeStream);
+ __UHEAP_MARKEND;
+ */
+ //iBuffer = HBufC8::NewL( 1024 );
+ //TPtr8 bfrPtr(iBuffer->Des());
+ // __UHEAP_MARK;
+ //RFileReadStream readStream;
+ // CleanupClosePushL(readStream);
+ // User::LeaveIfError(readStream.Open(iRfs,KFileName,EFileRead));
+
+ //TInt cells = User::CountAllocCells();
+ __UHEAP_MARK;
+ RFileWriteStream destStream;
+ CleanupClosePushL(destStream);
+ User::LeaveIfError(destStream.Create(iRfs,KFileName,EFileWrite));
+ iVCardEngine = CVPbkVCardEng::NewL( *iContactManager );
+ while(count)
+ {
+ MVPbkContactLinkArray* linkArray = iContactManager->CreateLinksLC(*idArray[--count]);
+ const MVPbkContactLink& link = linkArray->At(0);
+ iOp = iVCardEngine->ExportVCardL( destStream, link, *this );
+ CActiveScheduler::Start();
+ destStream.CommitL();
+ CleanupStack::PopAndDestroy();
+ }
+ delete iVCardEngine;
+ iVCardEngine = NULL;
+ CleanupStack::PopAndDestroy(&destStream);
+ __UHEAP_MARKEND;
+ CleanupStack::Pop(&idArray);
+ idArray.ResetAndDestroy();
+
+ /*
+ //CleanupStack::PushL(linkArray);
+ cells = User::CountAllocCells();
+ iVCardEngine = CVPbkVCardEng::NewL( *iContactManager );
+
+ cells = User::CountAllocCells();
+ RDesWriteStream destStream;
+ CleanupClosePushL(destStream);
+ //User::LeaveIfError(destStream.Create(iRfs,KFileName1,EFileWrite));
+ destStream.Open(bfrPtr);
+ TInt links = linkArray->Count();
+ while(links)
+ {
+ const MVPbkContactLink& link = linkArray->At(--links);
+ iOp = iVCardEngine->ExportVCardL( destStream, link, *this );
+ CActiveScheduler::Start();
+ }
+ destStream.CommitL();
+ CleanupStack::PopAndDestroy(&destStream);
+
+ cells = User::CountAllocCells();
+ delete iVCardEngine;
+ iVCardEngine = NULL;
+ cells = User::CountAllocCells();
+
+ CleanupStack::PopAndDestroy();
+ cells = User::CountAllocCells();
+ CleanupStack::PopAndDestroy(&readStream);
+
+ // __UHEAP_MARKEND;
+ if(iBuffer)
+ {
+ RFile file;
+ CleanupClosePushL(file);
+ file.Replace(iRfs,KFileName,EFileWrite);
+ file.Write(0,*iBuffer);
+ CleanupStack::PopAndDestroy(&file);
+ }
+ delete iBuffer;
+ iBuffer = NULL;
+ CleanupStack::Pop(&idArray);
+ idArray.ResetAndDestroy();
+ /*
+ // Create the buffer to store the contact
+ iBuffer = HBufC8::NewL( 1024 );
+ TPtr8 bufferPtr( iBuffer->Des() );
+ iDestStream.Open( bufferPtr );
+ //export the contact from MVPbkContactLink
+ // __UHEAP_MARK;
+
+ CActiveScheduler::Start();
+
+ // __UHEAP_MARKEND;
+ if( !iErr )
+ {
+ iDestStream.CommitL();
+ }
+
+ iDestStream.Close();
+ if(iBuffer)
+ {
+ RFile file;
+ CleanupClosePushL(file);
+ file.Replace(iRfs,KFileName,EFileWrite);
+ file.Write(0,*iBuffer);
+ CleanupStack::PopAndDestroy(&file);
+ }
+ delete iBuffer;
+ iBuffer = NULL;
+ delete iVCardEngine;
+ iVCardEngine = NULL;
+ CleanupStack::PopAndDestroy();//linkArray
+ //__UHEAP_MARKEND;
+
+ CleanupStack::Pop(&idArray);
+ idArray.ResetAndDestroy();
+ DeleteAllL();
+ */
+ /* __UHEAP_MARK;
+ CContactService* serviceHandle = CContactService::NewL();
+ CleanupStack::PushL(serviceHandle);
+ iLog->Log( KServiceOpen );
+
+ TFileName exportFile(KFileName);
+
+ serviceHandle->ExportVCardL(this,0,exportFile,idArray);
+ iLog->Log(_L("ExportVCardL called\n"));
+ iLog->Log(_L("Start Active Scheduler\n"));
+ CActiveScheduler::Start();
+
+ CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle
+ iLog->Log( KServiceClose );
+ __UHEAP_MARKEND;
+ *//*
+ TInt count = 0;
+ RPointerArray<TDesC8> idArray;
+ CleanupClosePushL(idArray);
+ CheckContactsL(count,idArray);
+ if(count != 1)
+ {
+ return KErrGeneral;
+ }*/
+ /* CleanupStack::Pop(&idArray);
+ idArray.ResetAndDestroy();*/
+ return iErr;
+ }
+// -----------------------------------------------------------------------------
+// CContactsUT::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::GetListDeleteContactL( CStifItemParser& aItem )
+ {
+ // Print to UI
+ _LIT( KContactsTest, "ContactsUT" );
+ _LIT( KExample, "In Add" );
+ TestModuleIf().Printf( 0, KContactsTest, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ TInt i = 0;
+ TPtrC string;
+ _LIT( KParam, "Param[%i]: %S" );
+ while ( aItem.GetNextString ( string ) == KErrNone )
+ {
+ TestModuleIf().Printf( i, KContactsTest,
+ KParam, i, &string );
+ i++;
+ }
+
+ iErr = KErrNone;
+
+
+ /**Getlist using SAPI core class*/
+
+ //__UHEAP_MARK;
+ CContactService* serviceHandle = CContactService::NewL();
+ CleanupStack::PushL(serviceHandle);
+ iLog->Log( KServiceOpen );
+
+ iOperation = EGetContactDelete;
+ serviceHandle->GetListL(this,0,EContacts);
+ iLog->Log(_L("GetListL called\n"));
+ iLog->Log(_L("Start Active Scheduler\n"));
+ CActiveScheduler::Start();
+
+ //iOperation = EGetContact;
+ //iServiceHandle->GetListL(this,0,EContacts,*iBuffer);
+ //CActiveScheduler::Start();
+ /**Delete using SAPI core class*/
+
+ // __UHEAP_MARK;
+ RPointerArray<TDesC8> idArray;
+ CleanupClosePushL(idArray);
+ idArray.AppendL(iBuffer);
+
+
+ serviceHandle->DeleteL(this,0,idArray);
+ iLog->Log(_L("DeleteL called\n"));
+ iLog->Log(_L("Start Active Scheduler\n"));
+ CActiveScheduler::Start();
+
+
+ CleanupStack::PopAndDestroy(&idArray);//singleContactField
+
+ CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle
+ iLog->Log( KServiceClose );
+ // __UHEAP_MARKEND;
+
+
+
+ return iErr;
+ }
+// -----------------------------------------------------------------------------
+// CContactsUT::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::AddContactGetListL( CStifItemParser& aItem )
+ {
+ // Print to UI
+ _LIT( KContactsTest, "ContactsUT" );
+ _LIT( KExample, "In Add" );
+ TestModuleIf().Printf( 0, KContactsTest, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ TInt i = 0;
+ TPtrC string;
+ _LIT( KParam, "Param[%i]: %S" );
+ while ( aItem.GetNextString ( string ) == KErrNone )
+ {
+ TestModuleIf().Printf( i, KContactsTest,
+ KParam, i, &string );
+ i++;
+ }
+
+ iErr = KErrNone;
+
+ /**Add contact using SAPI Core class*/
+
+ _LIT8(KFirstName,"FirstName");
+ _LIT(KName,"Kats");
+ _LIT8(KNumber,"MobilePhoneHome");
+ _LIT(KPhone,"98789");
+
+ // __UHEAP_MARK;
+ //instantiate service class
+ CContactService* serviceHandle = CContactService::NewL();
+ CleanupStack::PushL(serviceHandle);
+ iLog->Log( KServiceOpen );
+
+ CSingleContact* singleContact = CSingleContact::NewL();
+ CleanupStack::PushL(singleContact);
+ iLog->Log(_L("single Contact created\n"));
+
+ CSingleContactField* nameContactField = CSingleContactField::NewL();
+ CleanupStack::PushL(nameContactField);
+ iLog->Log(_L("Name Contact Field created \n"));
+
+ CSingleContactField* phoneContactField = CSingleContactField::NewL();
+ CleanupStack::PushL(phoneContactField);
+ iLog->Log(_L("Phone Contact Field created \n"));
+
+ nameContactField->SetFieldParamsL(KFirstName,KNullDesC,KName);
+ singleContact->AddFieldToContactL(nameContactField);
+ iLog->Log(_L("Name Contact Field added \n"));
+
+ phoneContactField->SetFieldParamsL(KNumber,KNullDesC,KPhone);
+ singleContact->AddFieldToContactL(phoneContactField);
+ iLog->Log(_L("Phone Contact Field added \n"));
+
+ serviceHandle->AddL(this,0,singleContact,KNullDesC8,KNullDesC);
+ iLog->Log(_L("AddL called\n"));
+ iLog->Log(_L("Start Active Scheduler\n"));
+ CActiveScheduler::Start();
+
+ CleanupStack::Pop(phoneContactField);//singleContactField
+ CleanupStack::Pop(nameContactField);//singleContactField
+ CleanupStack::PopAndDestroy(singleContact);//singleContact
+ // CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle
+ // iLog->Log( KServiceClose );
+// __UHEAP_MARKENDC(1);
+ /**end */
+
+ if(iErr)
+ {
+ return iErr;
+ }
+
+ /**Getlist using SAPI core class*/
+
+ //__UHEAP_MARK;
+ //serviceHandle = CContactService::NewL();
+ // CleanupStack::PushL(serviceHandle);
+ iLog->Log( KServiceOpen );
+
+ iOperation = EGetContact;
+ serviceHandle->GetListL(this,0,EContacts);
+ iLog->Log(_L("GetListL called\n"));
+ iLog->Log(_L("Start Active Scheduler\n"));
+ CActiveScheduler::Start();
+
+ //iOperation = EGetContact;
+ //iServiceHandle->GetListL(this,0,EContacts,*iBuffer);
+ //CActiveScheduler::Start();
+
+ CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle
+ iLog->Log( KServiceClose );
+ // __UHEAP_MARKEND;
+
+ if(iErr)
+ {
+ return iErr;
+ }
+ /**Delete using virtual Phonebook */
+
+
+ // Create find operation
+ iOp = iContactManager->MatchPhoneNumberL(
+ KPhone, KPhone().Length(), *this );
+ CActiveScheduler::Start();
+
+ iErr = KErrGeneral;
+ TInt count(iFindResults->Count());
+ while(count)
+ {
+ iContactToDelete = CVPbkContactLinkArray::NewL();
+ iContactToDelete->AppendL(&(const_cast<MVPbkContactLink&>(iFindResults->At(--count))));
+ iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+ CActiveScheduler::Start();
+ }
+ /**end */
+
+
+ return iErr;
+ }
+// -----------------------------------------------------------------------------
+// CContactsUT::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::GetGroupsL( CStifItemParser& aItem )
+ {
+
+ // Print to UI
+ _LIT( KContactsTest, "ContactsUT" );
+ _LIT( KExample, "In Add" );
+ TestModuleIf().Printf( 0, KContactsTest, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ TInt i = 0;
+ TPtrC string;
+ _LIT( KParam, "Param[%i]: %S" );
+ while ( aItem.GetNextString ( string ) == KErrNone )
+ {
+ TestModuleIf().Printf( i, KContactsTest,
+ KParam, i, &string );
+ i++;
+ }
+
+ iErr = KErrGeneral;
+
+ /**Add 1 group using virtual phonebook */
+
+
+
+ iGroup = iStore->CreateNewContactGroupLC();
+ iGroup->SetGroupLabelL(KGroup1);
+ iGroup->CommitL(*this);
+
+ CActiveScheduler::Start();
+ CleanupStack::Pop();
+
+
+ // __UHEAP_MARK;
+ iServiceHandle = CContactService::NewL();
+ iLog->Log( KServiceOpen );
+
+ CContactIter* iter = iServiceHandle->GetListL(EGroups);
+ iLog->Log(_L("GetListL called\n"));
+ iLog->Log(_L("Start Active Scheduler\n"));
+ // CActiveScheduler::Start();
+
+ iErr = KErrGeneral;
+ CSingleContact* singleContact = NULL;
+ HBufC8* buf = NULL;
+ TInt count = 0;
+ while(ETrue)
+ {
+ iter->NextL(singleContact,buf);
+ iBuffer = buf;
+ if(!singleContact)
+ {
+ break;
+ }
+ ++count;
+ TInt fields(singleContact->FieldCount());
+ while(fields)
+ {
+ CSingleContactField* field = singleContact->FieldAt(--fields);
+ TPtrC groupId;
+ RPointerArray<TDesC8> array;
+ field->GetFieldDataL(groupId,array);
+
+
+ if(groupId.Compare(KGroup1)==0)
+ {
+ iErr = KErrNone;
+ break;
+ }
+ }
+ }
+ delete iServiceHandle;//serviceHandle
+ delete iter;
+ iServiceHandle = NULL;
+ iLog->Log( KServiceClose );
+ return iErr;
+
+ }
+
+TInt CContactsUT::GetDatabaseL( CStifItemParser& aItem )
+ {
+
+ // Print to UI
+ _LIT( KContactsTest, "ContactsUT" );
+ _LIT( KExample, "In Add" );
+ TestModuleIf().Printf( 0, KContactsTest, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ TInt i = 0;
+ TPtrC string;
+ _LIT( KParam, "Param[%i]: %S" );
+ while ( aItem.GetNextString ( string ) == KErrNone )
+ {
+ TestModuleIf().Printf( i, KContactsTest,
+ KParam, i, &string );
+ i++;
+ }
+
+ iErr = KErrNone;
+
+
+
+ // __UHEAP_MARK;
+ iServiceHandle = CContactService::NewL();
+ iLog->Log( KServiceOpen );
+
+ iOperation = EGetDatabase;
+
+ CContactIter* iter = CContactIter::NewL();
+ iServiceHandle->GetListL(*iter);
+ iLog->Log(_L("GetListL called\n"));
+ TPtrC DbName;
+ iter->NextL(DbName);
+
+ while(!DbName.Compare(KNullDesC))
+ {
+ iter->NextL(DbName);
+ }
+
+ delete iServiceHandle;//serviceHandle
+ iServiceHandle = NULL;
+ delete iter;
+ iLog->Log( KServiceClose );
+ // __UHEAP_MARKEND;
+
+
+
+
+ return iErr;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CContactsUT::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::GetContactsL( CStifItemParser& aItem )
+ {
+
+
+ /**GetList using SAPI Core class */
+ // __UHEAP_MARK;
+
+
+
+ // Print to UI
+ _LIT( KContactsTest, "ContactsUT" );
+ _LIT( KExample, "In Add" );
+ TestModuleIf().Printf( 0, KContactsTest, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ TInt i = 0;
+ TPtrC string;
+ _LIT( KParam, "Param[%i]: %S" );
+ while ( aItem.GetNextString ( string ) == KErrNone )
+ {
+ TestModuleIf().Printf( i, KContactsTest,
+ KParam, i, &string );
+ i++;
+ }
+
+ iErr = KErrNone;
+
+ /**Delete using virtual Phonebook */
+
+ _LIT(KPhone,"13579");
+ // Create find operation
+ iOp = iContactManager->MatchPhoneNumberL(
+ KPhone, KPhone().Length(), *this );
+ CActiveScheduler::Start();
+
+ iErr = KErrGeneral;
+ TInt count1(iFindResults->Count());
+ while(count1)
+ {
+ iContactToDelete = CVPbkContactLinkArray::NewL();
+ iContactToDelete->AppendL(&(const_cast<MVPbkContactLink&>(iFindResults->At(--count1))));
+ iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+ CActiveScheduler::Start();
+ }
+ /**end */
+
+ /**Add 2 contacts using virtual phonebook*/
+
+ CVPbkFieldTypeRefsList* fieldTypeRefList = CVPbkFieldTypeRefsList::NewL();
+ CleanupStack::PushL(fieldTypeRefList);
+
+ fieldTypeRefList->AppendL(
+ *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME ) );
+ fieldTypeRefList->AppendL(
+ *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_MOBILEPHONEGEN ) );
+
+ // Create first contact
+ iStoreContact = iStore->CreateNewContactLC();
+
+ // Create contact field for contact
+ MVPbkStoreContactField* field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 0 ) );
+ // Set contact field data
+ _LIT(KFirstName,"Tenali");
+ (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstName );
+ // Add the contact field to contact
+ iStoreContact->AddFieldL( field );
+ CleanupStack::Pop(); // field
+
+ // Create contact field for contact
+ field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 1 ) );
+ // Set contact field data
+ _LIT(KFirstNumber,"13579");
+ (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstNumber );
+ // Add the contact field to contact
+ iStoreContact->AddFieldL( field );
+ CleanupStack::Pop(); // field
+
+ // Commit the new created contact to contact store
+ iStoreContact->CommitL( *this );
+ CActiveScheduler::Start();
+ CleanupStack::Pop(); // iStoreContact
+
+
+ // Create second contact
+ iStoreContact = iStore->CreateNewContactLC();
+
+ // Create contact field for contact
+ field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 0 ) );
+ // Set contact field data
+ _LIT(KSecondName,"Birbal");
+ (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KSecondName );
+ // Add the contact field to contact
+ iStoreContact->AddFieldL( field );
+ CleanupStack::Pop(); // field
+
+ // Create contact field for contact
+ field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 1 ) );
+ // Set contact field data
+ _LIT(KSecondNumber,"13579");
+ (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KSecondNumber );
+ // Add the contact field to contact
+ iStoreContact->AddFieldL( field );
+ CleanupStack::Pop(); // field
+
+ // Commit the new created contact to contact store
+ iStoreContact->CommitL( *this );
+ CActiveScheduler::Start();
+ CleanupStack::Pop(); // iStoreContact
+
+ CleanupStack::PopAndDestroy(fieldTypeRefList);
+ /**end*/
+
+
+
+ iServiceHandle = CContactService::NewL();
+ iLog->Log( KServiceOpen );
+
+ iOperation = EGetContact;
+ CContactIter* iter = iServiceHandle->GetListL(EContacts);
+
+ _LIT8(KFirstName1,"FirstName");
+ _LIT(KTName,"Tenali");
+ _LIT(KBName,"Birbal");
+ TInt tError = KErrNotFound;
+ TInt bError = KErrNotFound;
+ CSingleContact* singleContact = NULL;
+ HBufC8* buf = NULL;
+ TInt count = 0;
+ while(ETrue)
+ {
+ iter->NextL(singleContact,buf);
+ if(!singleContact)
+ {
+ break;
+ }
+ ++count;
+ TInt count(singleContact->FieldCount());
+ while(count)
+ {
+ CSingleContactField* field = singleContact->FieldAt(--count);
+ TPtrC8 fieldKey;
+ TPtrC label;
+ TPtrC value;
+ field->GetFieldDataL(fieldKey,label,value);
+ if (fieldKey == KFirstName1 && value == KTName)
+ {
+ tError = KErrNone;
+ }
+ else if (fieldKey == KFirstName1 && value == KBName)
+ {
+ bError = KErrNone;
+ }
+ }
+ delete singleContact;
+ }
+ if(tError == KErrNone && bError == KErrNone)
+ {
+ iErr = KErrNone;
+ }
+ else
+ {
+ iErr = KErrNotFound;
+ }
+ delete iServiceHandle;//serviceHandle
+ delete iter;
+ iServiceHandle = NULL;
+ iLog->Log( KServiceClose );
+ return iErr;
+ }
+
+// -----------------------------------------------------------------------------
+// CContactsUT::?member_function
+// ?implementation_description
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::AddL( CStifItemParser& aItem )
+ {
+ __UHEAP_MARK;
+
+ // Print to UI
+ _LIT( KContactsTest, "ContactsUT" );
+ _LIT( KExample, "In Add" );
+ TestModuleIf().Printf( 0, KContactsTest, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ TInt i = 0;
+ TPtrC string;
+ _LIT( KParam, "Param[%i]: %S" );
+ while ( aItem.GetNextString ( string ) == KErrNone )
+ {
+ TestModuleIf().Printf( i, KContactsTest,
+ KParam, i, &string );
+ i++;
+ }
+
+ iErr = KErrNone;
+
+ /**Add contact using SAPI Core class*/
+
+ _LIT8(KFirstName,"FirstName");
+ _LIT(KName,"Sikandar");
+ _LIT8(KNumber,"MobilePhoneHome");
+ _LIT(KPhone,"123456");
+
+ //instantiate service class
+ CContactService* serviceHandle = CContactService::NewL();
+ CleanupStack::PushL(serviceHandle);
+ iLog->Log( KServiceOpen );
+
+ CSingleContact* singleContact = CSingleContact::NewL();
+ CleanupStack::PushL(singleContact);
+ iLog->Log(_L("single Contact created\n"));
+
+ CSingleContactField* nameContactField = CSingleContactField::NewL();
+ CleanupStack::PushL(nameContactField);
+ iLog->Log(_L("Name Contact Field created \n"));
+
+ CSingleContactField* phoneContactField = CSingleContactField::NewL();
+ CleanupStack::PushL(phoneContactField);
+ iLog->Log(_L("Phone Contact Field created \n"));
+
+ nameContactField->SetFieldParamsL(KFirstName,KNullDesC,KName);
+ singleContact->AddFieldToContactL(nameContactField);
+ iLog->Log(_L("Name Contact Field added \n"));
+
+ phoneContactField->SetFieldParamsL(KNumber,KNullDesC,KPhone);
+ singleContact->AddFieldToContactL(phoneContactField);
+ iLog->Log(_L("Phone Contact Field added \n"));
+
+ //temp
+
+ serviceHandle->AddL(this,0,singleContact);
+ CActiveScheduler::Start();
+
+
+
+
+
+
+
+ serviceHandle->AddL(singleContact);
+ iLog->Log(_L("AddL called\n"));
+ iLog->Log(_L("Start Active Scheduler\n"));
+ CleanupStack::Pop(phoneContactField);//singleContactField
+ CleanupStack::Pop(nameContactField);//singleContactField
+ CleanupStack::PopAndDestroy(singleContact);//singleContact
+
+
+ CContactIter* iter = serviceHandle->GetListL( EContacts,KNullDesC8,KName);
+
+ HBufC8* buf = NULL;
+ TInt count = 0;
+ while(ETrue)
+ {
+ iter->NextL(singleContact,buf);
+ if(!singleContact)
+ {
+ break;
+ }
+ ++count;
+ TInt count(singleContact->FieldCount());
+ while(count)
+ {
+ CSingleContactField* field = singleContact->FieldAt(--count);
+ TPtrC8 fieldKey;
+ TPtrC label;
+ TPtrC value;
+ field->GetFieldDataL(fieldKey,label,value);
+ if (fieldKey == KFirstName && value == KName)
+ {
+ iErr = KErrNone;
+ }
+ }
+ delete singleContact;
+ delete buf;
+ }
+ delete buf;
+
+
+ CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle
+ delete iter;
+ iLog->Log( KServiceClose );
+ __UHEAP_MARKEND;
+ /**end */
+
+ if(iErr)
+ {
+ return iErr;
+ }
+
+ /**Delete using virtual Phonebook */
+ /*
+
+ // Create find operation
+ iOp = iContactManager->MatchPhoneNumberL(
+ KPhone, KPhone().Length(), *this );
+ CActiveScheduler::Start();
+
+ iErr = KErrGeneral;
+ TInt count(iFindResults->Count());
+ while(count)
+ {
+ iContactToDelete = CVPbkContactLinkArray::NewL();
+ iContactToDelete->AppendL(&(const_cast<MVPbkContactLink&>(iFindResults->At(--count))));
+ iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+ CActiveScheduler::Start();
+ }
+ /**end */
+
+
+ return iErr;
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// CContactsUT::AddGroupL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::AddGroupL( CStifItemParser& aItem )
+ {
+
+ // Print to UI
+ _LIT( KContactsTest, "ContactsTest" );
+ _LIT( KExample, "In AddGroup" );
+ TestModuleIf().Printf( 0, KContactsTest, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ TInt i = 0;
+ TPtrC string;
+ _LIT( KParam, "Param[%i]: %S" );
+ while ( aItem.GetNextString ( string ) == KErrNone )
+ {
+ TestModuleIf().Printf( i, KContactsTest,
+ KParam, i, &string );
+ i++;
+ }
+
+ iErr = KErrNone;
+
+ /**Add group using SAPI core class */
+ __UHEAP_MARK;
+ _LIT(KGroup,"Test");
+ //instantiate service class
+ CContactService* serviceHandle = CContactService::NewL();
+ CleanupStack::PushL(serviceHandle);
+ iLog->Log( KServiceOpen );
+
+ serviceHandle->AddL(NULL,KNullDesC8,KGroup);
+ iLog->Log(_L("AddL called\n"));
+ iLog->Log(_L("Start Active Scheduler\n"));
+
+ CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle
+ iLog->Log( KServiceClose );
+
+ /**end */
+ __UHEAP_MARKEND;
+ if(iErr)
+ {
+ return iErr;
+ }
+
+ //Check for the added group using virtual phonebook classes
+ iFindResults = iStore->ContactGroupsLC();
+ TInt count(iFindResults->Count());
+ while(count)
+ {
+ iResult = &(const_cast<MVPbkContactLink&>(iFindResults->At(--count)));
+ iOp = iContactManager->RetrieveContactL(*iResult,*this);
+ CActiveScheduler::Start();
+
+ if(iErr)
+ {
+ break;
+ }
+ iErr = KErrGeneral;
+ iGroup = iStoreContact->Group();
+ if(!iGroup->GroupLabel().Compare(KGroup))
+ {
+ iErr = KErrNone;
+ iContactToDelete = CVPbkContactLinkArray::NewL();
+ iContactToDelete->AppendL(iResult);
+ iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+ CActiveScheduler::Start();
+ break;
+ }
+ }
+ CleanupStack::Pop();
+ iFindResults = NULL;
+ /**end */
+
+ return iErr;
+
+ }
+
+
+// -----------------------------------------------------------------------------
+// CContactsUT::DeleteL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::DeleteContactL( CStifItemParser& aItem )
+ {
+ __UHEAP_MARK;
+ RPointerArray<TDesC8> idArray;
+ CleanupClosePushL(idArray);
+ CSingleContact* myContact=NULL;
+
+ HBufC8* conactId = NULL;
+
+ CContactService* serviceHandle = CContactService::NewL();
+ CleanupStack::PushL(serviceHandle);
+ iLog->Log( KServiceOpen );
+
+ CContactIter* Iter = serviceHandle->GetListL( EContacts );
+
+ Iter->NextL(myContact,conactId);
+
+ idArray.AppendL(&conactId->Des());
+
+ serviceHandle->DeleteL(idArray);
+
+ iLog->Log(_L("DeleteL called\n"));
+ iLog->Log(_L("Start Active Scheduler\n"));
+ //CActiveScheduler::Start();
+
+ CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle
+ CleanupStack::PopAndDestroy(&idArray);//singleContactField
+ delete myContact;
+ delete conactId;
+ delete Iter;
+ iLog->Log( KServiceClose );
+ __UHEAP_MARKEND;
+ return iErr;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CContactsUT::DeleteListL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::DeleteGroupL( CStifItemParser& aItem )
+ {
+
+ // Print to UI
+ _LIT( KContactsTest, "ContactsTest" );
+ _LIT( KExample, "In DeleteList" );
+ TestModuleIf().Printf( 0, KContactsTest, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ TInt i = 0;
+ TPtrC string;
+ _LIT( KParam, "Param[%i]: %S" );
+ while ( aItem.GetNextString ( string ) == KErrNone )
+ {
+ TestModuleIf().Printf( i, KContactsTest,
+ KParam, i, &string );
+ i++;
+ }
+ iErr = KErrNone;
+
+ /**Add 2 groups using virtual phonebook */
+
+ _LIT(KGroup1,"Test1");
+ _LIT(KGroup2,"Test2");
+ iGroup = iStore->CreateNewContactGroupLC();
+ iGroup->SetGroupLabelL(KGroup1);
+ iOperation = EGroup;
+ iGroup->CommitL(*this);
+
+ CActiveScheduler::Start();
+ CleanupStack::Pop();
+
+ iGroup = iStore->CreateNewContactGroupLC();
+ iGroup->SetGroupLabelL(KGroup2);
+ iOperation = EGroup;
+ iGroup->CommitL(*this);
+
+ CActiveScheduler::Start();
+ CleanupStack::Pop();
+ /**end */
+
+ if(iErr)
+ {
+ return iErr;
+ }
+
+ /**Delete the groups using SAPI core class */
+
+ /** Check for the added group using virtual phonebook classes */
+
+ iFindResults = iStore->ContactGroupsLC();
+ TInt count(iFindResults->Count());
+ if(count>1)
+ {
+ HBufC8* groupId;
+ RPointerArray<TDesC8> idArray;
+ CleanupClosePushL(idArray);
+ while(count)
+ {
+ iResult = &(const_cast<MVPbkContactLink&>(iFindResults->At(--count)));
+ iOp = iContactManager->RetrieveContactL(*iResult,*this);
+ CActiveScheduler::Start();
+
+ iGroup = iStoreContact->Group();
+ if(!iGroup->GroupLabel().Compare(KGroup1) || !iGroup->GroupLabel().Compare(KGroup2))
+ {
+ groupId = iResult->PackLC();
+ idArray.AppendL(groupId);
+ }
+ }
+ TInt num(idArray.Count());
+ if( num < 2)
+ {
+ return KErrGeneral;
+ }
+ __UHEAP_MARK;
+ CContactService* serviceHandle = CContactService::NewL();
+ CleanupStack::PushL(serviceHandle);
+ iLog->Log( KServiceOpen );
+
+ serviceHandle->DeleteL(idArray);
+ iLog->Log(_L("DeleteL called\n"));
+ iLog->Log(_L("Start Active Scheduler\n"));
+ //CActiveScheduler::Start();
+
+ CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle
+ __UHEAP_MARKEND;
+ CleanupStack::PopAndDestroy(num);//destroy all contactIds
+ CleanupStack::PopAndDestroy(&idArray);//singleContactField
+
+ iLog->Log( KServiceClose );
+ }
+ CleanupStack::Pop();
+ iFindResults = NULL;
+ /**end */
+
+ return iErr;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CContactsUT::ModifyL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::ModifyL( CStifItemParser& aItem )
+ {
+ // Print to UI
+ _LIT( KContactsTest, "ContactsTest" );
+ _LIT( KExample, "In Modify" );
+ TestModuleIf().Printf( 0, KContactsTest, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ TInt i = 0;
+ TPtrC string;
+ _LIT( KParam, "Param[%i]: %S" );
+ while ( aItem.GetNextString ( string ) == KErrNone )
+ {
+ TestModuleIf().Printf( i, KContactsTest,
+ KParam, i, &string );
+ i++;
+ }
+ iErr = KErrNone;
+
+ /** Add 1 contacts */
+
+ CVPbkFieldTypeRefsList* fieldTypeRefList = CVPbkFieldTypeRefsList::NewL();
+ CleanupStack::PushL(fieldTypeRefList);
+
+ fieldTypeRefList->AppendL(
+ *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME ) );
+ fieldTypeRefList->AppendL(
+ *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_MOBILEPHONEGEN ) );
+
+ // Create first contact
+ iStoreContact = iStore->CreateNewContactLC();
+
+ // Create contact field for contact
+ MVPbkStoreContactField* field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 0 ) );
+ // Set contact field data
+ _LIT(KFirstName,"Tenali");
+ (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstName );
+ // Add the contact field to contact
+ iStoreContact->AddFieldL( field );
+ CleanupStack::Pop(); // field
+
+ // Create contact field for contact
+ field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 1 ) );
+ // Set contact field data
+ _LIT(KFirstNumber,"123456");
+ (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstNumber );
+ // Add the contact field to contact
+ iStoreContact->AddFieldL( field );
+ CleanupStack::Pop(); // field
+
+ // Commit the new created contact to contact store
+ iStoreContact->CommitL( *this );
+ CActiveScheduler::Start();
+ CleanupStack::Pop(); // iStoreContact
+
+ CleanupStack::PopAndDestroy(fieldTypeRefList);
+ /** ends */
+
+ /** Retrieve contact ids and modify using SAPI core class */
+
+ // Phone number to be searched for
+ _LIT( KMatchNo, "123456" );
+ // Create find operation
+ iOp = iContactManager->MatchPhoneNumberL(
+ KMatchNo, KMatchNo().Length(), *this );
+
+ CActiveScheduler::Start();
+ TInt count(iFindResults->Count());
+ /**end*/
+
+ /**Modify using SAPI core class*/
+
+
+ iBuffer = (const_cast<MVPbkContactLink&>(iFindResults->At(--count))).PackLC();
+ CleanupStack::Pop();//iBuffer
+
+ //__UHEAP_MARK;
+
+ iServiceHandle = CContactService::NewL();
+ iLog->Log( KServiceOpen );
+
+ iOperation = EContact;
+ CContactIter* iter = iServiceHandle->GetListL(EContacts);
+
+
+
+ iErr = KErrGeneral;
+ CSingleContact* singleContact = NULL;
+ HBufC8* buf = NULL;
+
+ _LIT(KPhone,"Birbal");
+ _LIT8(KField,"FirstName");
+
+ while(ETrue)
+ {
+ // __UHEAP_MARK;
+ iter->NextL(singleContact,buf);
+ if(!singleContact)
+ {
+ break;
+ }
+ CleanupStack::PushL(singleContact);
+
+ if(!buf->Compare(*iBuffer))
+ {
+ TInt count(singleContact->FieldCount());
+ CSingleContactField* field = NULL;
+ while(count)
+ {
+ TPtrC8 fieldKey;
+ TPtrC label;
+ TPtrC value;
+ field = singleContact->FieldAt(--count);
+ field->GetFieldDataL(fieldKey,label,value);
+ if(!fieldKey.Compare(KField))
+ {
+ field->SetFieldParamsL(KField,KNullDesC,KPhone);
+ iLog->Log(_L("Phone Contact Field modified \n"));
+ //__UHEAP_MARK;
+ iServiceHandle->AddL(singleContact);
+ iLog->Log(_L("AddL called\n"));
+ iLog->Log(_L("Start Active Scheduler\n"));
+ // CActiveScheduler::Start();
+ //__UHEAP_MARKEND;
+ break;
+ }
+ }
+ }
+
+ CleanupStack::PopAndDestroy(singleContact);
+ delete buf;
+ }
+ delete buf;
+ delete iter;
+
+ CContactIter* iterr = iServiceHandle->GetListL(EContacts,iBuffer->Des());
+
+ while(ETrue)
+ {
+ //__UHEAP_MARK;
+ iter->NextL(singleContact,buf);
+ if(!singleContact)
+ {
+ break;
+ }
+ CleanupStack::PushL(singleContact);
+
+ if(!buf->Compare(*iBuffer))
+ {
+ TInt count(singleContact->FieldCount());
+ CSingleContactField* field = NULL;
+ while(count)
+ {
+ TPtrC8 fieldKey;
+ TPtrC label;
+ TPtrC value;
+ field = singleContact->FieldAt(--count);
+ field->GetFieldDataL(fieldKey,label,value);
+ if(fieldKey == KField && value == KPhone)
+ {
+ iErr = KErrNone;
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy(singleContact);
+ delete buf;
+ }
+ delete buf;
+ iLog->Log(_L("GetListL called\n"));
+ iLog->Log(_L("Start Active Scheduler\n"));
+ //CActiveScheduler::Start();
+
+ delete iServiceHandle;//serviceHandle
+ delete iterr;
+ iServiceHandle = NULL;
+ iLog->Log( KServiceClose );
+ // __UHEAP_MARKEND;
+
+
+
+ /** ends */
+
+ /**Delete using virtual Phonebook
+ _LIT(KPhone1,"560087");
+
+ // Create find operation
+ iOp = iContactManager->MatchPhoneNumberL(
+ KPhone1, KPhone1().Length(), *this );
+ CActiveScheduler::Start();
+
+ iErr = KErrGeneral;
+ count = iFindResults->Count();
+ while(count)
+ {
+ iContactToDelete = CVPbkContactLinkArray::NewL();
+ iContactToDelete->AppendL(&(const_cast<MVPbkContactLink&>(iFindResults->At(--count))));
+ iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+ CActiveScheduler::Start();
+ }
+ /**end */
+
+ return iErr;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CContactsUT::ModifyGroupL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::ModifyGroupL( CStifItemParser& aItem )
+ {
+
+ // Print to UI
+ _LIT( KContactsTest, "ContactsTest" );
+ _LIT( KExample, "In ModifyGroup" );
+ TestModuleIf().Printf( 0, KContactsTest, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ TInt i = 0;
+ TPtrC string;
+ _LIT( KParam, "Param[%i]: %S" );
+ while ( aItem.GetNextString ( string ) == KErrNone )
+ {
+ TestModuleIf().Printf( i, KContactsTest,
+ KParam, i, &string );
+ i++;
+ }
+ iErr = KErrNone;
+ /**Add 1 group using virtual phonebook */
+
+ _LIT(KGroup1,"Modify1");
+ _LIT(KGroup2,"Modify2");
+ iGroup = iStore->CreateNewContactGroupLC();
+ iGroup->SetGroupLabelL(KGroup1);
+ iOperation = EGroup;
+ iGroup->CommitL(*this);
+
+ CActiveScheduler::Start();
+ CleanupStack::Pop();
+ /**end */
+
+ /** Check for the added group using virtual phonebook classes */
+ iFindResults = iStore->ContactGroupsLC();
+ TInt count(iFindResults->Count());
+ while(count)
+ {
+ iResult = &(const_cast<MVPbkContactLink&>(iFindResults->At(--count)));
+ iOp = iContactManager->RetrieveContactL(*iResult,*this);
+ CActiveScheduler::Start();
+
+ if(iErr)
+ {
+ break;
+ }
+ iErr = KErrGeneral;
+ iGroup = iStoreContact->Group();
+ if(!iGroup->GroupLabel().Compare(KGroup1))
+ {
+ __UHEAP_MARK;
+ CContactService* serviceHandle = CContactService::NewL();
+ CleanupStack::PushL(serviceHandle);
+ iLog->Log( KServiceOpen );
+
+ serviceHandle->AddL(NULL,KNullDesC8,KGroup2);
+ iLog->Log(_L("ModifyGroupL called\n"));
+ iLog->Log(_L("Start Active Scheduler\n"));
+ // CActiveScheduler::Start();
+
+ CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle
+ iLog->Log( KServiceClose );
+ __UHEAP_MARKEND;
+ }
+ }
+ CleanupStack::Pop();
+ iFindResults = NULL;
+ /**end */
+
+ /** Check for the added group using virtual phonebook classes */
+ iFindResults = iStore->ContactGroupsLC();
+ count = iFindResults->Count();
+ while(count)
+ {
+ iResult = &(const_cast<MVPbkContactLink&>(iFindResults->At(--count)));
+ iOp = iContactManager->RetrieveContactL(*iResult,*this);
+ CActiveScheduler::Start();
+
+ if(iErr)
+ {
+ break;
+ }
+ iErr = KErrGeneral;
+ iGroup = iStoreContact->Group();
+ if(!iGroup->GroupLabel().Compare(KGroup2))
+ {
+ iErr = KErrNone;
+ iContactToDelete = CVPbkContactLinkArray::NewL();
+ iContactToDelete->AppendL(iResult);
+ iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+ CActiveScheduler::Start();
+ break;
+ }
+ }
+ CleanupStack::Pop();
+ iFindResults = NULL;
+
+ /**end */
+ return iErr;
+
+ }
+
+// -----------------------------------------------------------------------------
+// CContactsUT::OrganiseAddL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::OrganiseAddL( CStifItemParser& aItem )
+ {
+
+ // Print to UI
+ _LIT( KContactsTest, "ContactsTest" );
+ _LIT( KExample, "In OrganiseAdd" );
+ TestModuleIf().Printf( 0, KContactsTest, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ TInt i = 0;
+ TPtrC string;
+ _LIT( KParam, "Param[%i]: %S" );
+ while ( aItem.GetNextString ( string ) == KErrNone )
+ {
+ TestModuleIf().Printf( i, KContactsTest,
+ KParam, i, &string );
+ i++;
+ }
+
+ iErr = KErrNone;
+
+ /** Add 1 group */
+
+ _LIT(KGroup,"OrganiseTest1");
+ iGroup = iStore->CreateNewContactGroupLC();
+ iGroup->SetGroupLabelL(KGroup);
+ iOperation = EGroup;
+ iGroup->CommitL(*this);
+
+ CActiveScheduler::Start();
+ CleanupStack::Pop();
+ /** ends */
+
+
+ if(iErr)
+ {
+ return iErr;
+ }
+
+ /** Retrieve the group id */
+ HBufC8* groupId = NULL;
+ iFindResults = iStore->ContactGroupsLC();
+ TInt count(iFindResults->Count());
+ iErr = KErrGeneral;
+ while(count)
+ {
+ iResult = &(const_cast<MVPbkContactLink&>(iFindResults->At(--count)));
+ iOp = iContactManager->RetrieveContactL(*iResult,*this);
+ CActiveScheduler::Start();
+
+ iGroup = iStoreContact->Group();
+ if(!iGroup->GroupLabel().Compare(KGroup))
+ {
+ groupId =iResult->PackLC();
+ CleanupStack::Pop();//groupId
+ break;
+ }
+ }
+ CleanupStack::Pop();//iFindResults
+ CleanupStack::PushL(groupId);
+ iFindResults = NULL;
+ /** ends */
+
+ /** Add 2 contacts */
+
+ CVPbkFieldTypeRefsList* fieldTypeRefList = CVPbkFieldTypeRefsList::NewL();
+ CleanupStack::PushL(fieldTypeRefList);
+
+ fieldTypeRefList->AppendL(
+ *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME ) );
+ fieldTypeRefList->AppendL(
+ *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_MOBILEPHONEGEN ) );
+
+ // Create first contact
+ iStoreContact = iStore->CreateNewContactLC();
+
+ // Create contact field for contact
+ MVPbkStoreContactField* field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 0 ) );
+ // Set contact field data
+ _LIT(KFirstName,"Tenali");
+ (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstName );
+ // Add the contact field to contact
+ iStoreContact->AddFieldL( field );
+ CleanupStack::Pop(); // field
+
+ // Create contact field for contact
+ field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 1 ) );
+ // Set contact field data
+ _LIT(KFirstNumber,"24680");
+ (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstNumber );
+ // Add the contact field to contact
+ iStoreContact->AddFieldL( field );
+ CleanupStack::Pop(); // field
+
+ // Commit the new created contact to contact store
+ iStoreContact->CommitL( *this );
+ CActiveScheduler::Start();
+ CleanupStack::Pop(); // iStoreContact
+
+
+ // Create second contact
+ iStoreContact = iStore->CreateNewContactLC();
+
+ // Create contact field for contact
+ field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 0 ) );
+ // Set contact field data
+ _LIT(KSecondName,"Birbal");
+ (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KSecondName );
+ // Add the contact field to contact
+ iStoreContact->AddFieldL( field );
+ CleanupStack::Pop(); // field
+
+ // Create contact field for contact
+ field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 1 ) );
+ // Set contact field data
+ _LIT(KSecondNumber,"24680");
+ (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KSecondNumber );
+ // Add the contact field to contact
+ iStoreContact->AddFieldL( field );
+ CleanupStack::Pop(); // field
+
+ // Commit the new created contact to contact store
+ iStoreContact->CommitL( *this );
+ CActiveScheduler::Start();
+ CleanupStack::Pop(); // iStoreContact
+
+ CleanupStack::PopAndDestroy(fieldTypeRefList);
+ /** end */
+
+
+ if(iErr)
+ {
+ return iErr;
+ }
+
+
+ /** Retrieve the 2 contacts */
+
+ // Phone number to be searched for
+ _LIT( KMatchNo, "24680" );
+ // Create find operation
+ iOp = iContactManager->MatchPhoneNumberL(
+ KMatchNo, KMatchNo().Length(), *this );
+
+ CActiveScheduler::Start();
+ count = iFindResults->Count();
+ /**end*/
+
+ /**Organise using SAPI core class*/
+ if(count>1 && groupId)
+ {
+ RPointerArray<TDesC8> idArray;
+ CleanupClosePushL(idArray);
+ TInt num(count);
+ while(count)
+ {
+ HBufC8* contactId = (const_cast<MVPbkContactLink&>(iFindResults->At(--count))).PackLC();
+ idArray.AppendL(contactId);
+ }
+ __UHEAP_MARK;
+ CContactService* serviceHandle = CContactService::NewL();
+ CleanupStack::PushL(serviceHandle);
+ iLog->Log( KServiceOpen );
+
+ serviceHandle->OrganiseGroupsL(*groupId,idArray,ETrue);
+ iLog->Log(_L("OrganiseGroupsL called\n"));
+ iLog->Log(_L("Start Active Scheduler\n"));
+ //CActiveScheduler::Start();
+
+
+ CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle
+ __UHEAP_MARKEND;
+ CleanupStack::PopAndDestroy(num);//destroy all contactIds
+ CleanupStack::PopAndDestroy(&idArray);//singleContactField
+
+ iLog->Log( KServiceClose );
+ }
+ /** ends */
+
+
+ /** Check for the group and delete*/
+ iFindResults = iStore->ContactGroupsLC();
+ count = iFindResults->Count();
+ iErr = KErrGeneral;
+ while(count)
+ {
+ iResult = &(const_cast<MVPbkContactLink&>(iFindResults->At(--count)));
+ if(!(iResult->PackLC())->Compare(*groupId))
+ {
+ iOp = iContactManager->RetrieveContactL(*iResult,*this);
+ CActiveScheduler::Start();
+
+ iGroup = iStoreContact->Group();
+ MVPbkContactLinkArray* linkArray = iGroup->ItemsContainedLC();
+ iOp = iContactManager->DeleteContactsL( *linkArray, *this );
+ CActiveScheduler::Start();
+ CleanupStack::Pop();//linkArray
+
+ iContactToDelete = CVPbkContactLinkArray::NewL();
+ iContactToDelete->AppendL(iResult);
+ iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+ CActiveScheduler::Start();
+ }
+ CleanupStack::PopAndDestroy();
+ }
+ CleanupStack::Pop();
+ iFindResults = NULL;
+ /**end */
+ CleanupStack::PopAndDestroy(groupId);
+
+ return iErr;
+ }
+
+
+// -----------------------------------------------------------------------------
+// CContactsUT::OrganiseDeleteL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::OrganiseDeleteL( CStifItemParser& aItem )
+ {
+
+ // Print to UI
+ _LIT( KContactsTest, "ContactsTest" );
+ _LIT( KExample, "In OrganiseDelete" );
+ TestModuleIf().Printf( 0, KContactsTest, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ TInt i = 0;
+ TPtrC string;
+ _LIT( KParam, "Param[%i]: %S" );
+ while ( aItem.GetNextString ( string ) == KErrNone )
+ {
+ TestModuleIf().Printf( i, KContactsTest,
+ KParam, i, &string );
+ i++;
+ }
+ iErr = KErrNone;
+
+ /** Add 1 group */
+
+ _LIT(KGroup,"OrganiseTest1");
+ iGroup = iStore->CreateNewContactGroupLC();
+ iGroup->SetGroupLabelL(KGroup);
+ iOperation = EGroup;
+ iGroup->CommitL(*this);
+
+ CActiveScheduler::Start();
+ CleanupStack::Pop();
+ /** ends */
+
+
+ if(iErr)
+ {
+ return iErr;
+ }
+
+
+ /** Add 2 contacts */
+
+ CVPbkFieldTypeRefsList* fieldTypeRefList = CVPbkFieldTypeRefsList::NewL();
+ CleanupStack::PushL(fieldTypeRefList);
+
+ fieldTypeRefList->AppendL(
+ *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME ) );
+ fieldTypeRefList->AppendL(
+ *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_MOBILEPHONEGEN ) );
+
+ // Create first contact
+ iStoreContact = iStore->CreateNewContactLC();
+
+ // Create contact field for contact
+ MVPbkStoreContactField* field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 0 ) );
+ // Set contact field data
+ _LIT(KFirstName,"Tenali");
+ (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstName );
+ // Add the contact field to contact
+ iStoreContact->AddFieldL( field );
+ CleanupStack::Pop(); // field
+
+ // Create contact field for contact
+ field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 1 ) );
+ // Set contact field data
+ _LIT(KFirstNumber,"97531");
+ (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstNumber );
+ // Add the contact field to contact
+ iStoreContact->AddFieldL( field );
+ CleanupStack::Pop(); // field
+
+ // Commit the new created contact to contact store
+ iStoreContact->CommitL( *this );
+ CActiveScheduler::Start();
+ CleanupStack::Pop(); // iStoreContact
+
+
+ // Create second contact
+ iStoreContact = iStore->CreateNewContactLC();
+
+ // Create contact field for contact
+ field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 0 ) );
+ // Set contact field data
+ _LIT(KSecondName,"Birbal");
+ (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KSecondName );
+ // Add the contact field to contact
+ iStoreContact->AddFieldL( field );
+ CleanupStack::Pop(); // field
+
+ // Create contact field for contact
+ field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 1 ) );
+ // Set contact field data
+ _LIT(KSecondNumber,"97531");
+ (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KSecondNumber );
+ // Add the contact field to contact
+ iStoreContact->AddFieldL( field );
+ CleanupStack::Pop(); // field
+
+ // Commit the new created contact to contact store
+ iStoreContact->CommitL( *this );
+ CActiveScheduler::Start();
+ CleanupStack::Pop(); // iStoreContact
+
+ CleanupStack::PopAndDestroy(fieldTypeRefList);
+ /** end */
+
+
+ if(iErr)
+ {
+ return iErr;
+ }
+
+ /** Retrieve the 2 contacts */
+ RPointerArray<TDesC8> idArray;
+ CleanupClosePushL(idArray);
+ // Phone number to be searched for
+ _LIT( KMatchNo, "97531" );
+ // Create find operation
+ iOp = iContactManager->MatchPhoneNumberL(
+ KMatchNo, KMatchNo().Length(), *this );
+
+ CActiveScheduler::Start();
+ TInt count = iFindResults->Count();
+ TInt num(count);
+ iContactToDelete = CVPbkContactLinkArray::NewL();
+ while(count)
+ {
+ iResult = &(const_cast<MVPbkContactLink&>(iFindResults->At(--count)));
+ iContactToDelete->AppendL(iResult);
+ idArray.AppendL(iResult->PackLC());
+ }
+ /** ends */
+
+ /** Retrieve the group id */
+ HBufC8* groupId = NULL;
+ iFindResults = iStore->ContactGroupsLC();
+ count = iFindResults->Count();
+ iErr = KErrGeneral;
+ while(count)
+ {
+ iResult = &(const_cast<MVPbkContactLink&>(iFindResults->At(--count)));
+ iOp = iContactManager->RetrieveContactL(*iResult,*this);
+ CActiveScheduler::Start();
+
+ iGroup = iStoreContact->Group();
+ if(!iGroup->GroupLabel().Compare(KGroup))
+ {
+ groupId =iResult->PackLC();
+ TInt count(iContactToDelete->Count());
+ while(count)
+ {
+ iGroup->AddContactL(iContactToDelete->At(--count));
+ }
+ CleanupStack::Pop();
+ break;
+ }
+ }
+ CleanupStack::Pop();
+ CleanupStack::PushL(groupId);
+ iFindResults = NULL;
+ delete iContactToDelete;
+ iContactToDelete = NULL;
+ /** ends */
+
+ /**Organise using SAPI core class*/
+ if(groupId)
+ {
+ __UHEAP_MARK;
+ CContactService* serviceHandle = CContactService::NewL();
+ CleanupStack::PushL(serviceHandle);
+ iLog->Log( KServiceOpen );
+
+ serviceHandle->OrganiseGroupsL(*groupId,idArray,EFalse);
+ iLog->Log(_L("OrganiseGroupsL called\n"));
+ iLog->Log(_L("Start Active Scheduler\n"));
+ //CActiveScheduler::Start();
+
+
+ CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle
+
+ iLog->Log( KServiceClose );
+ __UHEAP_MARKEND;
+ }
+ /** ends */
+
+
+ /** Check for the group */
+ iFindResults = iStore->ContactGroupsLC();
+ count = iFindResults->Count();
+ iErr = KErrGeneral;
+ while(count)
+ {
+ iResult = &(const_cast<MVPbkContactLink&>(iFindResults->At(--count)));
+ if(!(iResult->PackLC())->Compare(*groupId))
+ {
+ iContactToDelete = CVPbkContactLinkArray::NewL();
+ iContactToDelete->AppendL(iResult);
+ iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+ CActiveScheduler::Start();
+ }
+ CleanupStack::PopAndDestroy();
+ }
+ CleanupStack::Pop(); //iFindResults
+ iFindResults = NULL;
+ /**end */
+ CleanupStack::PopAndDestroy(groupId);
+ CleanupStack::PopAndDestroy(num);//destroy all contactIds
+ CleanupStack::PopAndDestroy(&idArray);//singleContactField
+
+ return iErr;
+ }
+
+// -----------------------------------------------------------------------------
+// CContactsUT::OrganiseDeleteL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::ImportL( CStifItemParser& aItem )
+ {
+
+ // Print to UI
+ _LIT( KContactsTest, "ContactsTest" );
+ _LIT( KExample, "In Import" );
+ TestModuleIf().Printf( 0, KContactsTest, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ TInt i = 0;
+ TPtrC string;
+ _LIT( KParam, "Param[%i]: %S" );
+ while ( aItem.GetNextString ( string ) == KErrNone )
+ {
+ TestModuleIf().Printf( i, KContactsTest,
+ KParam, i, &string );
+ i++;
+ }
+ iErr = KErrNone;
+ _LIT(KFileName,"c:\\vcardex.vcf");
+
+ /** Add 1 contact */
+ CVPbkFieldTypeRefsList* fieldTypeRefList = CVPbkFieldTypeRefsList::NewL();
+ CleanupStack::PushL(fieldTypeRefList);
+
+ fieldTypeRefList->AppendL(
+ *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME ) );
+ fieldTypeRefList->AppendL(
+ *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_MOBILEPHONEGEN ) );
+
+ // Create first contact
+ iStoreContact = iStore->CreateNewContactLC();
+
+ // Create contact field for contact
+ MVPbkStoreContactField* field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 0 ) );
+ // Set contact field data
+ _LIT(KFirstName,"Tenali");
+ (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstName );
+ // Add the contact field to contact
+ iStoreContact->AddFieldL( field );
+ CleanupStack::Pop(); // field
+
+ // Create contact field for contact
+ field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 1 ) );
+ // Set contact field data
+ _LIT(KFirstNumber,"45678");
+ (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstNumber );
+ // Add the contact field to contact
+ iStoreContact->AddFieldL( field );
+ CleanupStack::Pop(); // field
+
+ // Commit the new created contact to contact store
+ iStoreContact->CommitL( *this );
+ CActiveScheduler::Start();
+ CleanupStack::Pop(); // iStoreContact
+
+ CleanupStack::PopAndDestroy(fieldTypeRefList);
+ /** end */
+
+ /** Retrieve the contact */
+
+ // Phone number to be searched for
+ _LIT( KMatchNo, "45678" );
+ // Create find operation
+ iOp = iContactManager->MatchPhoneNumberL(
+ KMatchNo, KMatchNo().Length(), *this );
+
+ CActiveScheduler::Start();
+ TInt count = iFindResults->Count();
+ while(count)
+ {
+ iResult = &(const_cast<MVPbkContactLink&>(iFindResults->At(--count)));
+ iVCardEngine = CVPbkVCardEng::NewL( *iContactManager );
+
+ // Create the buffer to store the contact
+ iBuffer = HBufC8::NewL( 1024 );
+ TPtr8 bufferPtr( iBuffer->Des() );
+ iDestStream.Open( bufferPtr );
+
+ iOperation = EVCard;
+
+ //export the contact from MVPbkContactLink
+ iOp = iVCardEngine->ExportVCardL( iDestStream, *iResult, *this );
+ CActiveScheduler::Start();
+
+ delete iVCardEngine;
+ iVCardEngine = NULL;
+
+ if(iBuffer)
+ {
+ RFile file;
+ CleanupClosePushL(file);
+ file.Replace(iRfs,KFileName,EFileWrite);
+ file.Write(0,*iBuffer);
+ CleanupStack::PopAndDestroy(&file);
+ delete iBuffer;
+ iBuffer = NULL;
+ }
+
+ iContactToDelete = CVPbkContactLinkArray::NewL();
+ iContactToDelete->AppendL(iResult);
+ iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+ CActiveScheduler::Start();
+ }
+ iFindResults = NULL;
+ __UHEAP_MARK;
+ //using sapi
+ CContactService* serviceHandle = CContactService::NewL();
+ CleanupStack::PushL(serviceHandle);
+ iLog->Log( KServiceOpen );
+
+ TFileName file(KFileName);
+
+ serviceHandle->ImportVCardToStoreL(file);
+ iLog->Log(_L("ImportVCardToStoreL called\n"));
+ iLog->Log(_L("Start Active Scheduler\n"));
+ // CActiveScheduler::Start();
+
+ CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle
+ iLog->Log( KServiceClose );
+ __UHEAP_MARKEND;
+ /**Delete using virtual Phonebook */
+
+
+ // Create find operation
+ iOp = iContactManager->MatchPhoneNumberL(
+ KMatchNo, KMatchNo().Length(), *this );
+ CActiveScheduler::Start();
+ iErr = KErrGeneral;
+ count = iFindResults->Count();
+ while(count)
+ {
+ iContactToDelete = CVPbkContactLinkArray::NewL();
+ iContactToDelete->AppendL(&(const_cast<MVPbkContactLink&>(iFindResults->At(--count))));
+ iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+ CActiveScheduler::Start();
+ }
+ /**end */
+
+ return iErr;
+ }
+// -----------------------------------------------------------------------------
+// CContactsUT::OrganiseDeleteL
+// Example test method function.
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+TInt CContactsUT::ExportL( CStifItemParser& aItem )
+ {
+
+ // Print to UI
+ _LIT( KContactsTest, "ContactsTest" );
+ _LIT( KExample, "In Import" );
+ TestModuleIf().Printf( 0, KContactsTest, KExample );
+ // Print to log file
+ iLog->Log( KExample );
+
+ TInt i = 0;
+ TPtrC string;
+ _LIT( KParam, "Param[%i]: %S" );
+ while ( aItem.GetNextString ( string ) == KErrNone )
+ {
+ TestModuleIf().Printf( i, KContactsTest,
+ KParam, i, &string );
+ i++;
+ }
+ iErr = KErrNone;
+ _LIT(KFileName,"c:\\vcardim.vcf");
+ RFs fs;
+ CleanupClosePushL(fs);
+ User::LeaveIfError(fs.Connect());
+ RFile file;
+ if(!file.Open(fs,KFileName,EFileRead))
+ {
+ file.Close();
+ fs.Delete(KFileName);
+ }
+ CleanupStack::PopAndDestroy(&fs);
+
+ /** Add 1 contact */
+ CVPbkFieldTypeRefsList* fieldTypeRefList = CVPbkFieldTypeRefsList::NewL();
+ CleanupStack::PushL(fieldTypeRefList);
+
+ fieldTypeRefList->AppendL(
+ *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME ) );
+ fieldTypeRefList->AppendL(
+ *iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_MOBILEPHONEGEN ) );
+
+ // Create first contact
+ iStoreContact = iStore->CreateNewContactLC();
+
+ // Create contact field for contact
+ MVPbkStoreContactField* field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 0 ) );
+ // Set contact field data
+ _LIT(KFirstName,"Tenali");
+ (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstName );
+ // Add the contact field to contact
+ iStoreContact->AddFieldL( field );
+ CleanupStack::Pop(); // field
+
+ // Create contact field for contact
+ field = iStoreContact->CreateFieldLC( fieldTypeRefList->FieldTypeAt( 1 ) );
+ // Set contact field data
+ _LIT(KFirstNumber,"214365");
+ (MVPbkContactFieldTextData::Cast(field->FieldData())).SetTextL( KFirstNumber );
+ // Add the contact field to contact
+ iStoreContact->AddFieldL( field );
+ CleanupStack::Pop(); // field
+
+ // Commit the new created contact to contact store
+ iStoreContact->CommitL( *this );
+ CActiveScheduler::Start();
+ CleanupStack::Pop(); // iStoreContact
+
+ CleanupStack::PopAndDestroy(fieldTypeRefList);
+ /** end */
+
+ /** Retrieve the contact */
+
+ // Phone number to be searched for
+ _LIT( KMatchNo, "214365" );
+ // Create find operation
+ iOp = iContactManager->MatchPhoneNumberL(
+ KMatchNo, KMatchNo().Length(), *this );
+
+ CActiveScheduler::Start();
+ TInt count = iFindResults->Count();
+
+ iResult = &(const_cast<MVPbkContactLink&>(iFindResults->At(--count)));
+ iBuffer = iResult->PackLC();
+ CleanupStack::Pop();
+ // __UHEAP_MARK;
+ //using sapi
+ CContactService* serviceHandle = CContactService::NewL();
+ CleanupStack::PushL(serviceHandle);
+ iLog->Log( KServiceOpen );
+
+ CSingleContact* myContact=NULL;
+
+ HBufC8* conactId = NULL;
+ TFileName filename(KFileName);
+ CContactIter* Iter = serviceHandle->GetListL( EContacts );
+
+ Iter->NextL(myContact,conactId);
+
+ serviceHandle->ExportVCardL(filename,conactId->Des());
+
+ delete myContact;
+ delete Iter;
+ iLog->Log(_L("ExportVCardL called\n"));
+ iLog->Log(_L("Start Active Scheduler\n"));
+ //CActiveScheduler::Start();
+
+ CleanupStack::PopAndDestroy(serviceHandle);//serviceHandle
+ iLog->Log( KServiceClose );
+ // __UHEAP_MARKEND;
+
+ iContactToDelete = CVPbkContactLinkArray::NewL();
+ iContactToDelete->AppendL(iResult);
+ iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+ CActiveScheduler::Start();
+
+ delete iBuffer;
+ iBuffer = NULL;
+
+ RPointerArray< MVPbkStoreContact > importedContacts;
+ CleanupClosePushL(importedContacts);
+
+ iVCardEngine = CVPbkVCardEng::NewL( *iContactManager );
+
+ // Open the RFileReadStream that holds the vCard content
+ iErr = iSource.Open( iRfs, KFileName, EFileRead );
+
+ // Import the contact from RFileReadStream asynchronously
+ // The operation status is reported via MVPbkSingleContactOperationObserver.
+ iOp = iVCardEngine->ImportVCardL( importedContacts, *iStore, iSource, *this );
+ CActiveScheduler::Start();
+
+ if(!importedContacts.Count())
+ {
+ return KErrGeneral;
+
+ }
+
+ // Close iImportedContacts
+ //
+ importedContacts.ResetAndDestroy();
+ CleanupStack::PopAndDestroy(&importedContacts);
+ iFindResults = NULL;
+
+ /**Delete using virtual Phonebook */
+
+ // Create find operation
+ iOp = iContactManager->MatchPhoneNumberL(
+ KMatchNo, KMatchNo().Length(), *this );
+ CActiveScheduler::Start();
+
+ count = iFindResults->Count();
+ while(count)
+ {
+ iContactToDelete = CVPbkContactLinkArray::NewL();
+ iContactToDelete->AppendL(&(const_cast<MVPbkContactLink&>(iFindResults->At(--count))));
+ iOp = iContactManager->DeleteContactsL( *iContactToDelete, *this );
+ CActiveScheduler::Start() ;
+ }
+ /**end */
+
+ return iErr;
+ }
+
+
+
+//End of file