--- a/phonebookui/Phonebook2/UIPolicy/src/CPbk2ContactDuplicatePolicy.cpp Tue May 11 16:00:21 2010 +0300
+++ b/phonebookui/Phonebook2/UIPolicy/src/CPbk2ContactDuplicatePolicy.cpp Tue May 25 12:26:45 2010 +0300
@@ -24,6 +24,13 @@
#include <MPbk2ContactNameFormatter.h>
#include <CPbk2DuplicateContactFinder.h>
#include <MPbk2DuplicateContactObserver.h>
+#include <RPbk2LocalizedResourceFile.h>
+#include "Pbk2DataCaging.hrh"
+#include "Pbk2PresentationUtils.h"
+#include <Pbk2Presentation.rsg>
+#include <CVPbkFieldTypeSelector.h>
+#include <CVPbkFieldTypeIterator.h>
+#include <CVPbkFieldTypeRefsList.h>
// Virtual Phonebook
#include <CVPbkContactManager.h>
@@ -31,6 +38,10 @@
#include <CVPbkContactLinkArray.h>
#include <MVPbkStoreContact.h>
+// System includes
+#include <barsread.h>
+
+
/// Unnamed namespace for local definitions
namespace {
@@ -222,6 +233,7 @@
delete iDuplicateFinder;
delete iNameFormatter;
delete iSortOrderManager;
+ delete iFieldTypeRefsList;
}
// --------------------------------------------------------------------------
@@ -252,11 +264,11 @@
iContactManager.FieldTypes(), *iSortOrderManager,
&iContactManager.FsSession() );
- const MVPbkFieldTypeList* fieldTypesForFind =
- &iSortOrderManager->SortOrder();
- if ( aFieldTypeForFind )
+ const MVPbkFieldTypeList* fieldTypesForFind = aFieldTypeForFind;
+ if ( !fieldTypesForFind )
{
- fieldTypesForFind = aFieldTypeForFind;
+ iFieldTypeRefsList = CreateFieldTypesForFindL(iContactManager);
+ fieldTypesForFind = iFieldTypeRefsList;
}
iDuplicateFinder = CPbk2DuplicateContactFinder::NewL( iContactManager,
*iNameFormatter, *fieldTypesForFind, iDuplicates );
@@ -279,4 +291,57 @@
aMaxDuplicatesToFind );
}
+// --------------------------------------------------------------------------
+// CPbk2ContactDuplicatePolicy::CreateFieldTypesForFindL
+// --------------------------------------------------------------------------
+//
+MVPbkFieldTypeList* CPbk2ContactDuplicatePolicy::CreateFieldTypesForFindL
+ (CVPbkContactManager& aContactManager) const
+ {
+ RFs fs = aContactManager.FsSession();
+ RPbk2LocalizedResourceFile resFile(&fs);
+ resFile.OpenLC(KPbk2RomFileDrive,
+ KDC_RESOURCE_FILES_DIR,
+ Pbk2PresentationUtils::PresentationResourceFile());
+
+ // Create resource reader.
+ TResourceReader resReader;
+ resReader.SetBuffer(resFile.AllocReadLC(R_TITLE_FIELD_SELECTOR));
+
+ // Create title field selector.
+ CVPbkFieldTypeSelector* titleFieldSelector = CVPbkFieldTypeSelector::NewL
+ (resReader, aContactManager.FieldTypes());
+ CleanupStack::PushL(titleFieldSelector);
+
+ // Create field type list for find.
+ CVPbkFieldTypeRefsList* fieldTypeRefsList = CVPbkFieldTypeRefsList::NewL();
+ CleanupStack::PushL(fieldTypeRefsList);
+ const MVPbkFieldType* fieldType = NULL;
+
+ // Create field type iterator.
+ CVPbkFieldTypeIterator* fieldTypeIterator =
+ CVPbkFieldTypeIterator::NewLC(*titleFieldSelector,
+ aContactManager.FieldTypes());
+ while(fieldTypeIterator->HasNext())
+ {
+ fieldType = fieldTypeIterator->Next();
+ if (fieldType)
+ {
+ // Filter the Versit type for find.
+ if (EVPbkNonVersitTypeNone == fieldType->NonVersitType())
+ {
+ fieldTypeRefsList->AppendL(*fieldType);
+ }
+ }
+ }
+
+ CleanupStack::PopAndDestroy(); // fieldTypeIterator
+ CleanupStack::Pop(fieldTypeRefsList);
+ CleanupStack::PopAndDestroy(); // titleFieldSelector
+ CleanupStack::PopAndDestroy(); // resReader
+ CleanupStack::PopAndDestroy(); // resFile
+
+ return fieldTypeRefsList;
+ }
+
// End of File