phonebookui/Phonebook2/CommandsExtension/src/CPbk2MergeContactsCmd.cpp
branchRCL_3
changeset 6 e8e3147d53eb
parent 3 04ab22b956c2
child 8 5586b4d2ec3e
--- 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<TVPbkFieldVersitProperty> 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<TVPbkFieldVersitProperty> 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;
+                            }
                         }
                     }
                 }