phonebookui/Phonebook2/NamesListExtension/src/CPbk2NlxAddToTopContactsCmd.cpp
branchRCL_3
changeset 13 a6539d1e8e43
parent 5 81f8547efd4f
--- a/phonebookui/Phonebook2/NamesListExtension/src/CPbk2NlxAddToTopContactsCmd.cpp	Tue May 25 12:26:45 2010 +0300
+++ b/phonebookui/Phonebook2/NamesListExtension/src/CPbk2NlxAddToTopContactsCmd.cpp	Wed Jun 09 09:26:27 2010 +0300
@@ -45,6 +45,7 @@
 #include <CVPbkTopContactManager.h>
 #include <CPbk2FetchDlg.h>
 #include <MPbk2ContactViewSupplier.h>
+#include <MPbk2ContactViewSupplier2.h>
 #include <CPbk2ContactViewBuilder.h>
 #include <MVPbkContactViewBase.h>
 #include <CPbk2StoreConfiguration.h>
@@ -139,7 +140,7 @@
     delete iMarkedEntries;
     delete iContactIterator;
     delete iContactOperation; //Cancels request if pending
-    delete iDecorator;
+    delete iDelayedWaitNote;
     delete iVPbkTopContactManager;
     delete iContactRelocator;
     }
@@ -170,12 +171,33 @@
         {
         iUiControl->RegisterCommand( this );
         }    
-    
+      
     iContactManager =
         &Phonebook2::Pbk2AppUi()->ApplicationServices().ContactManager();
-    iVPbkTopContactManager = CVPbkTopContactManager::NewL( *iContactManager );
+    
+    // For performance optimization, get the top contacts view 
+    // from pbk2 applications services and provide to top contact 
+    // manager if the view is available
+    
+    MPbk2ContactViewSupplier2* viewSupplierExtension = 
+               reinterpret_cast<MPbk2ContactViewSupplier2*>(
+                   Phonebook2::Pbk2AppUi()->ApplicationServices().ViewSupplier().
+                       MPbk2ContactViewSupplierExtension(
+                           KMPbk2ContactViewSupplierExtension2Uid ));
+
+    MVPbkContactViewBase* topContactsView = viewSupplierExtension->TopContactsViewL();
+    if ( topContactsView )
+        {
+        iVPbkTopContactManager = CVPbkTopContactManager::NewL( *iContactManager, 
+                *topContactsView);
+        }
+    else
+        {
+        iVPbkTopContactManager = CVPbkTopContactManager::NewL( *iContactManager );
+        }
+    
     }
-    
+
 // --------------------------------------------------------------------------
 // CPbk2NlxAddToTopContactsCmd::ExecuteLD
 // --------------------------------------------------------------------------
@@ -260,7 +282,7 @@
                 {
                 StartNext(ESetAsTopContact);
                 }
-    	    ShowWaitNoteL();
+    	    ShowDelayedWaitNoteL();
     	    }
     	    break;
         case ESetAsTopContact:
@@ -594,10 +616,10 @@
 	    CCoeEnv::Static()->HandleError( aReason );
 	    }
 	
-    if ( iDecorator )
+    if ( iDelayedWaitNote ) 
         {
-        // wait for callback from the wait note and finish then
-        iDecorator->ProcessStopped();
+        // wait for callback from the wait note and finish then      
+        iDelayedWaitNote->Stop();
         }
     else
         {
@@ -618,6 +640,10 @@
     SetActive();
     }
 
+// ---------------------------------------------------------------------------
+// CPbk2NlxAddToTopContactsCmd::StartNext
+// ---------------------------------------------------------------------------
+//
 void CPbk2NlxAddToTopContactsCmd::StartNext()
     {
     __ASSERT_DEBUG( !IsActive(), Panic( ENlxAtcWronglyActivated ));    
@@ -626,15 +652,23 @@
     SetActive();
     }
 
-void CPbk2NlxAddToTopContactsCmd::ShowWaitNoteL()
+// ---------------------------------------------------------------------------
+// CPbk2NlxAddToTopContactsCmd::ShowDelayedWaitNoteL
+// ---------------------------------------------------------------------------
+//
+void CPbk2NlxAddToTopContactsCmd::ShowDelayedWaitNoteL()
     {
-    __ASSERT_DEBUG( !iDecorator, Panic( ENlxNoteActive ));
-    iDecorator = Pbk2ProcessDecoratorFactory::CreateWaitNoteDecoratorL
-        ( R_QTN_GEN_NOTE_SAVING_WAIT, ETrue );
-    iDecorator->SetObserver( *this );
-    iDecorator->ProcessStartedL( 0 ); // wait note doesn't care about amount
+    if ( !iDelayedWaitNote )
+        {
+        iDelayedWaitNote = CPbk2DelayedWaitNote::NewL(*this, R_QTN_GEN_NOTE_SAVING_WAIT);
+        iDelayedWaitNote->Start();
+        }
     }
-
+      
+// ---------------------------------------------------------------------------
+// CPbk2NlxAddToTopContactsCmd::ProcessDismissed
+// ---------------------------------------------------------------------------
+//
 void CPbk2NlxAddToTopContactsCmd::ProcessDismissed( TInt /*aCancelCode*/ )
     {
     StartNext( EFinish );
@@ -673,10 +707,10 @@
     TInt /* aReason */,
     MVPbkStoreContact* /* aContact */ )
 	{
-    if ( iDecorator )
+    if ( iDelayedWaitNote )
         {
         // wait for callback from the wait note and finish then
-        iDecorator->ProcessStopped();
+        iDelayedWaitNote->Stop();
         }
     else
         {