--- a/phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkFilteredContactView.cpp Tue Apr 27 16:23:35 2010 +0300
+++ b/phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkFilteredContactView.cpp Tue May 11 16:00:21 2010 +0300
@@ -434,6 +434,11 @@
iContactMapping.Reset();
+ MVPbkOptimizedSelector* optimizedSelector =
+ static_cast<MVPbkOptimizedSelector*>(
+ iContactSelector.ContactSelectorExtension(
+ KVPbkOptimizedSelectorExtensionUid ) );
+
const TInt count = iBaseView.ContactCountL();
for (TInt i = 0; i < count; ++i)
{
@@ -441,6 +446,17 @@
{
iContactMapping.AppendL(i);
}
+
+ if( optimizedSelector && !optimizedSelector->Continue() )
+ {
+ // we doesn't need use selector anymore -> include rest of contacts
+ for (TInt j = i+1; j < count; ++j )
+ {
+ iContactMapping.AppendL(j);
+ }
+ break;
+ }
+
}
VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING
@@ -617,6 +633,13 @@
//
TInt CVPbkFilteredContactView::UpdateViewMappingAfterAddingL( TInt aBaseIndex )
{
+ // protect against ghost contacts. Can happen if last of the contacts is
+ // deleted or changed into own card immediately after creation.
+ if ( iBaseView.ContactCountL() <= aBaseIndex )
+ {
+ return KErrNotFound;
+ }
+
// first update the mapping for all elements which > aBaseIndex
TInt filteredIndex;
// find first elemnt which >= aBaseIndex