phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkFilteredContactView.cpp
branchRCL_3
changeset 32 2828b4d142c0
parent 15 e8e3147d53eb
child 64 c1e8ba0c2b16
--- 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