void RemoveSpeedDialWhenOpenL(TInt aContact, TInt aSpeedDialID, CContactDatabase& aDatabase) { CContactItem* card1 = 0; TInt error = KErrNone; // First open the contact, which locks it: card1 = aDatabase.OpenContactL(aContact); CleanupStack::PushL(card1); // Now attempt to open the contact (must fail with in use): error = KErrNone; TRAP(error, aDatabase.OpenContactL(aContact)); g_test(error == KErrInUse); // Now remove the speed dial on that contact (must fail with in use): error = KErrNone; TRAP(error, aDatabase.RemoveSpeedDialFieldL(aContact, aSpeedDialID)); g_test(error == KErrInUse); // Now remove the speed dial on that contact again (must fail with in use): // Defect was application crash. error = KErrNone; TRAP(error, aDatabase.RemoveSpeedDialFieldL(aContact, aSpeedDialID)); g_test(error == KErrInUse); // Now attempt to open the contact (must fail with in use): // Defect was fails with wrong error/no error. error = KErrNone; TRAP(error, aDatabase.OpenContactL(aContact)); g_test(error == KErrInUse); // Cleanup and close: CleanupStack::PopAndDestroy(card1); TRAP(error, aDatabase.CloseContactL(aContact)); g_test(error == KErrNone); }
LOCAL_C void LongNumSpeedDialTestsL() { _LIT(KLongNumSpeedDialTest, "Long Phone Number Speed Dial Test"); g_test.Start(KLongNumSpeedDialTest); // create default, empty database CContactDatabase* db = CContactDatabase::ReplaceL(KLongNumSpeedDialDbName); CleanupStack::PushL(db); // create a contact and add it to the db CContactItem* contact = CContactCard::NewLC(); CContactItemField* fname = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldGivenName); _LIT(KFname, "James"); fname->TextStorage()->SetTextL(KFname() ); contact->AddFieldL(*fname); CleanupStack::Pop(fname); CContactItemField* phone = CContactItemField::NewLC(KStorageTypeText, KUidContactFieldPhoneNumber); _LIT(KPhoneNum, "01234567890123456789012345678901234567890123456789012345678901234567890123456789"); // 80 chars phone->TextStorage()->SetTextL(KPhoneNum() ); contact->AddFieldL(*phone); CleanupStack::Pop(phone); const TContactItemId KContactId = db->AddNewContactL(*contact); CleanupStack::PopAndDestroy(contact); contact = NULL; // retrieve contact and assign its number to speed dial #1 contact = db->OpenContactL(KContactId); CleanupStack::PushL(contact); const TInt KSpeedDial1(1); const TInt KPhoneNumIndex = contact->CardFields().Find(KUidContactFieldPhoneNumber); db->SetFieldAsSpeedDialL(*contact, KPhoneNumIndex, KSpeedDial1); TBuf<100> speedDialNumberText; TContactItemId speedDialId = db->GetSpeedDialFieldL(KSpeedDial1, speedDialNumberText); _LIT(KOutputFormat, "retrieved speed dial id: %d;\nretrieved speed dial phone number: ...\n%S\n"); g_test.Printf(KOutputFormat, speedDialId, &speedDialNumberText); db->CloseContactL(KContactId); // cleanup CleanupStack::PopAndDestroy(2, db); // and contact CContactDatabase::DeleteDatabaseL(KLongNumSpeedDialDbName); // Since PDEF121954, long phone numbers set as speed dial are truncated to // the length of KSpeedDialPhoneLength. So, we need to get the truncated // version of the phone number for comparison with the speed dial value. TPtrC phoneNum(KPhoneNum().Mid(0, KSpeedDialPhoneLength)); g_test(speedDialId == KContactId && speedDialNumberText.CompareC(phoneNum) == 0); g_test.End(); g_test.Close(); }
void CTestContactOperations::DeleteContactsL() { // existing database TPtrC databaseFile(_L("C:contactDB.cdb")); TContactItemId itemId = KErrNotFound; CContactDatabase* dBase = NULL; CContactIdArray* idArray = NULL; dBase = CContactDatabase::OpenL(databaseFile); CleanupStack::PushL(dBase); // Set the filter to select all the contact items in the database CCntFilter* exportFilter = CCntFilter::NewL(); CleanupStack::PushL(exportFilter); exportFilter->SetContactFilterTypeCard(ETrue); dBase->FilterDatabaseL(*exportFilter); idArray = exportFilter->iIds; CleanupStack::PushL(idArray); TInt numberOfContacts; GetIntFromConfig(ConfigSection(), KNumberOfCont, numberOfContacts); INFO_PRINTF1(_L("Deleting Contacts.....")); // Delete the contacts one at a time for(TInt i=(idArray->Count()-1);i>=0;i--) { dBase->DeleteContactL((*idArray)[i]); } _LIT(KCount, "The number of contacts in the database is %d \n"); INFO_PRINTF2(KCount, dBase->CountL()); // Close the contacts dBase->CloseContactL(itemId); // Cleanup CleanupStack::Pop(idArray); CleanupStack::PopAndDestroy(exportFilter); CleanupStack::PopAndDestroy(dBase); }
TBool ContactIsASpeedDialL(TInt aContactId, CContactDatabase& aDatabase) { CContactItem* item = NULL; TBool result = EFalse; item = aDatabase.OpenContactL(aContactId); CleanupStack::PushL(item); const CContactItemFieldSet& fields = item->CardFields(); const TInt count = fields.Count(); for (TInt index = 0; index < count; ++index) { if (fields[index].IsSpeedDial()) { result = ETrue; break; } } aDatabase.CloseContactL(aContactId); CleanupStack::PopAndDestroy(item); return result; }
/** Create Multiple Contact Item with field and Add all contact * Item to Contact database. Update the multiple contact item field value and * verify field is being updated. * aValue - field value * @param aStorageType - Storage type of each field * @param aContFieldUid - Uid of Contact field * @param avCardMapUid - Uid of vCard * @return - void */ void CTestUpdateMultipleContactsStep::CreateAndUpdateMultipleContactsL(TPtrC aValue, TInt aStorageType,TUid aContFieldUid, TUid avCardMap) { TPtrC value, updateVal, getUpdateValue; CContactDatabase *dBase = NULL; _LIT(KTestDbName, "c:contactmultiple.cdb"); TInt year, month, day,noOfCI; TContactItemId id = 0; RArray <TInt> idArray; CleanupClosePushL(idArray); //replace existing database name dBase = CContactDatabase::ReplaceL(KTestDbName); //Get the number of contact item from ini file GetIntFromConfig(ConfigSection(), KNoOfContactItem, noOfCI); //Get the int value GetIntFromConfig(ConfigSection(), KIniYear, year); GetIntFromConfig(ConfigSection(), KIniMonth, month); GetIntFromConfig(ConfigSection(), KIniDay, day); // Create contact item and add field to it for(TInt range=0;range<noOfCI;range++) { CContactItem* item = CContactCard::NewLC(); CContactItemField* field = CContactItemField::NewL(aStorageType, aContFieldUid); CleanupStack::PushL(field); field->SetMapping(avCardMap); if(aStorageType==KStorageTypeDateTime) { TDateTime date(year,(TMonth)month,day,0,0,0,0); field->DateTimeStorage()->SetTime(date); } else { field->TextStorage()->SetTextL(aValue); } item->AddFieldL(*field); CleanupStack::Pop(field); // add contact item to database id = dBase->AddNewContactL(*item); idArray.Append(id); CleanupStack::PopAndDestroy(item); } dBase->CloseContactL(id); // Get the value from ini file for update GetStringFromConfig(ConfigSection(), KIniUpdatedvalue, updateVal); GetIntFromConfig(ConfigSection(), KIniUpdateYear, year); GetIntFromConfig(ConfigSection(), KIniUpdateMonth, month); GetIntFromConfig(ConfigSection(), KIniUpdateDay, day); // update multiple contact item field value CContactItem *readItem = NULL; for(TInt readContact=0;readContact<noOfCI;readContact++) { readItem = dBase->ReadContactLC(idArray[readContact]); CContactItemFieldSet& ContactFieldSet = readItem->CardFields(); TInt pos = ContactFieldSet.Find(aContFieldUid, avCardMap); if(pos != KErrNotFound) { if(aStorageType==KStorageTypeDateTime) { // update the field value TDateTime date(year,(TMonth)month,day,0,0,0,0); ContactFieldSet[pos].DateTimeStorage()->SetTime(date); ContactFieldSet.UpdateFieldL(ContactFieldSet[pos],pos); // verify the updated field value TInt upadtePos = ContactFieldSet.Find(aContFieldUid, avCardMap); TDateTime result=ContactFieldSet[upadtePos].DateTimeStorage()->Time().DateTime(); if((result.Year() == year) && (result.Month() == (TMonth)month) && (result.Day() == day)) { SetTestStepResult(EPass); } else { SetTestStepResult(EFail); } } else { // Update the field value ContactFieldSet[pos].TextStorage()->SetTextL(updateVal); ContactFieldSet.UpdateFieldL(ContactFieldSet[pos],pos); // verify the field is being updated TInt upadtePos = ContactFieldSet.Find(aContFieldUid, avCardMap); getUpdateValue.Set(ContactFieldSet[upadtePos].TextStorage()->Text()); //set the results if(getUpdateValue.Compare(updateVal)==0 ) { SetTestStepResult(EPass); } else { SetTestStepResult(EFail); } } } CleanupStack::PopAndDestroy(readItem); } CleanupStack::PopAndDestroy(&idArray); delete dBase; }