diff -r 81f8547efd4f -r e8e3147d53eb phonebookui/Phonebook2/CommandsExtension/src/CPbk2MergeContactsCmd.cpp --- a/phonebookui/Phonebook2/CommandsExtension/src/CPbk2MergeContactsCmd.cpp Fri Mar 12 15:41:25 2010 +0200 +++ b/phonebookui/Phonebook2/CommandsExtension/src/CPbk2MergeContactsCmd.cpp Mon Mar 15 12:39:26 2010 +0200 @@ -76,6 +76,8 @@ const TInt KFirstContact = 0; const TInt KSecondContact = 1; +const TInt KAmountToMerge = 2; +const TInt KDeletionDelay = 1000000; // 1s _LIT( KLocalStore, "cntdb://c:contacts.cdb" ); @@ -129,6 +131,8 @@ } CleanAfterFetching(); + iTimer.Cancel(); + iTimer.Close(); delete iFirstContactString; delete iSecondContactString; delete iMergedContactString; @@ -202,6 +206,7 @@ iContactManager = &Phonebook2::Pbk2AppUi()->ApplicationServices().ContactManager(); iAppServices = CPbk2ApplicationServices::InstanceL(); iPhotoConflictIndex = KErrNotFound; + User::LeaveIfError( iTimer.CreateLocal() ); } // -------------------------------------------------------------------------- @@ -487,19 +492,23 @@ for ( TInt i(0); i < fields.FieldCount(); ++i ) { MVPbkStoreContactField& field = fields.FieldAt( i ); - if ( field.BestMatchingFieldType()->FieldTypeResId() == R_VPBK_FIELD_TYPE_FIRSTNAME ) + const MVPbkFieldType* fieldType = field.BestMatchingFieldType(); + if ( fieldType ) { - MVPbkContactFieldData& data = field.FieldData(); - __ASSERT_DEBUG( data.DataType() == EVPbkFieldStorageTypeText, Panic( EPbk2WrongTypeOfData ) ); - MVPbkContactFieldTextData& textData = MVPbkContactFieldTextData::Cast( data ); - firstName.Set( textData.Text() ); - } - else if ( field.BestMatchingFieldType()->FieldTypeResId() == R_VPBK_FIELD_TYPE_LASTNAME ) - { - MVPbkContactFieldData& data = field.FieldData(); - __ASSERT_DEBUG( data.DataType() == EVPbkFieldStorageTypeText, Panic( EPbk2WrongTypeOfData ) ); - MVPbkContactFieldTextData& textData = MVPbkContactFieldTextData::Cast( data ); - lastName.Set( textData.Text() ); + if ( fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_FIRSTNAME ) + { + MVPbkContactFieldData& data = field.FieldData(); + __ASSERT_DEBUG( data.DataType() == EVPbkFieldStorageTypeText, Panic( EPbk2WrongTypeOfData ) ); + MVPbkContactFieldTextData& textData = MVPbkContactFieldTextData::Cast( data ); + firstName.Set( textData.Text() ); + } + else if ( fieldType->FieldTypeResId() == R_VPBK_FIELD_TYPE_LASTNAME ) + { + MVPbkContactFieldData& data = field.FieldData(); + __ASSERT_DEBUG( data.DataType() == EVPbkFieldStorageTypeText, Panic( EPbk2WrongTypeOfData ) ); + MVPbkContactFieldTextData& textData = MVPbkContactFieldTextData::Cast( data ); + lastName.Set( textData.Text() ); + } } } @@ -640,6 +649,7 @@ params.iResId = R_PBK2_MULTIPLE_ENTRY_FETCH_NO_GROUPS_DLG; params.iCbaId = R_PBK2_SOFTKEYS_MERGE_BACK_MARK; params.iNaviPaneId = R_PBK2_MERGE_CONTACTS_FETCH_NAVILABEL; + params.iMinSelection = KAmountToMerge; CPbk2StorePropertyArray& storeProperties = Phonebook2::Pbk2AppUi()->ApplicationServices().StoreProperties(); @@ -753,10 +763,19 @@ // void CPbk2MergeContactsCmd::StartNext( TPhase aPhase ) { - __ASSERT_DEBUG( !IsActive(), Panic( EPbk2WronglyActivated )); - iNextPhase = aPhase; - TRequestStatus* status = &iStatus; - User::RequestComplete(status, KErrNone); + __ASSERT_DEBUG( !IsActive(), Panic( EPbk2WronglyActivated )); + + iNextPhase = aPhase; + + if ( iNextPhase == EPhaseGetGroups ) + { + iTimer.After( iStatus, KDeletionDelay ); + } + else + { + TRequestStatus* status = &iStatus; + User::RequestComplete( status, KErrNone ); + } SetActive(); } @@ -1236,19 +1255,22 @@ conflict.GetFieldsL( firstField, secondField ); const MVPbkFieldType* fieldType = firstField->BestMatchingFieldType(); - TArray versitPropArr = fieldType->VersitProperties(); - TInt count = versitPropArr.Count(); - - for( TInt idx = 0; idx < count; idx++ ) + if ( fieldType ) { - TVPbkFieldVersitProperty versitProp = versitPropArr[idx]; - if( versitProp.Name() == EVPbkVersitNamePHOTO ) + TArray versitPropArr = fieldType->VersitProperties(); + TInt count = versitPropArr.Count(); + + for( TInt idx = 0; idx < count; idx++ ) { - if ( firstField->FieldData().DataType() == EVPbkFieldStorageTypeBinary && - secondField->FieldData().DataType() == EVPbkFieldStorageTypeBinary ) + TVPbkFieldVersitProperty versitProp = versitPropArr[idx]; + if( versitProp.Name() == EVPbkVersitNamePHOTO ) { - iPhotoConflictIndex = i; - break; + if ( firstField->FieldData().DataType() == EVPbkFieldStorageTypeBinary && + secondField->FieldData().DataType() == EVPbkFieldStorageTypeBinary ) + { + iPhotoConflictIndex = i; + break; + } } } }