phoneuis/easydialing/src/easydialingplugin.cpp
branchRCL_3
changeset 14 24062c24fe38
parent 9 8871b09be73b
child 15 2a26698d78ba
--- a/phoneuis/easydialing/src/easydialingplugin.cpp	Fri Feb 19 22:50:26 2010 +0200
+++ b/phoneuis/easydialing/src/easydialingplugin.cpp	Fri Mar 12 15:42:40 2010 +0200
@@ -24,6 +24,7 @@
 #include "easydialingcenreplistener.h"
 #include "easydialingcontactdatamanager.h"
 #include "easydialingutils.h"
+#include "easydialingcommands.hrh"
 #include <easydialingpluginresources.rsg>
 
 // AVKON and drawing header files
@@ -183,6 +184,10 @@
     // Set contact store observer to listen to contact store events.
     iContactManager->ContactStoresL().OpenAllL( *this );
     
+    iContactDataManager = new (ELeave) CEasyDialingContactDataManager(iContactManager);
+    iContactDataManager->ConstructL();
+    iContactDataManager->SetObserver(this);
+
     PERF_MEASURE_START
 
     InitPredictiveContactSearchL();
@@ -206,10 +211,6 @@
     iContactLauncher = static_cast<MCCAConnectionExt*>( any );
     
     iCenrepListener = CEasyDialingCenrepListener::NewL(this);
-    
-    iContactDataManager = new (ELeave) CEasyDialingContactDataManager(iContactManager);
-    iContactDataManager->ConstructL();
-    iContactDataManager->SetObserver(this);
    
     iContactorService = CEDContactorService::NewL( this );
 
@@ -388,6 +389,8 @@
         contact_fields.Append(R_VPBK_FIELD_TYPE_COMPANYNAME);
         }
 
+    SetSortOrderL( iContactDataManager->NameOrder() );
+
     // Create and fill ps settings object.
     CPsSettings* ps_settings = CPsSettings::NewL();
     CleanupStack::PushL(ps_settings);
@@ -407,6 +410,32 @@
     }
 
 // -----------------------------------------------------------------------------
+// GetContactFields
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::SetSortOrderL( CEasyDialingContactDataManager::TNameOrder aNameOrder )
+    {
+    RArray<TInt> fields;
+    CleanupClosePushL( fields );
+    if ( aNameOrder == CEasyDialingContactDataManager::EFirstnameLastname )
+        {
+        fields.Append(R_VPBK_FIELD_TYPE_FIRSTNAME);
+        fields.Append(R_VPBK_FIELD_TYPE_LASTNAME);
+        }
+    else
+        {
+        fields.Append(R_VPBK_FIELD_TYPE_LASTNAME);
+        fields.Append(R_VPBK_FIELD_TYPE_FIRSTNAME);
+        }
+    if ( iCompanyNamePCSIndex != KErrNotFound )
+        {
+        fields.Append(R_VPBK_FIELD_TYPE_COMPANYNAME);
+        }
+    iPredictiveContactSearchHandler->ChangeSortOrderL( *iContactDataStores[0], fields );
+    CleanupStack::PopAndDestroy(); //fields
+    }
+
+// -----------------------------------------------------------------------------
 // OfferKeyEventL
 // Check the received keypad event and performs user
 // actions related to it.
@@ -752,6 +781,19 @@
     }
 
 // -----------------------------------------------------------------------------
+// NameOrderChanged
+// From MContactDataManagerObserver
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingPlugin::NameOrderChanged()
+    {
+    if ( iPredictiveContactSearchHandler )
+        {
+        TRAP_IGNORE( SetSortOrderL( iContactDataManager->NameOrder() ) );
+        }
+    }
+
+// -----------------------------------------------------------------------------
 // InformContactorEvent
 // From MEDContactorObserver
 // -----------------------------------------------------------------------------
@@ -805,7 +847,7 @@
         {
         return;
         }
-    
+   
     iDiscardCompletingSearches = EFalse;
     iNewSearchNeeded = EFalse;
     
@@ -968,10 +1010,7 @@
     if ( numberOfPCSMatches > 0 )
         {
         // retrieve the name order before adding
-        CPbkContactEngine* pbkEngine = CPbkContactEngine::NewL();
-        CleanupStack::PushL( pbkEngine );
-        CPbkContactEngine::TPbkNameOrder nameOrder = pbkEngine->NameDisplayOrderL();
-        CleanupStack::PopAndDestroy( pbkEngine );
+        CEasyDialingContactDataManager::TNameOrder nameOrder = iContactDataManager->NameOrder();
 
         // map results to old contact match data
         for( TInt i = 0; i < numberOfPCSMatches; i++ )
@@ -995,7 +1034,7 @@
 
         TInt numberOfFavs( iContactDataManager->NumberOfFavsL() );
         TBuf<KBufferMaxLen> results;
-        for ( TInt i = 0; i < numberOfFavs; i++ )
+        for ( TInt i = numberOfFavs - 1; i >= 0; i-- )
             {
             // check if this fav matches the search
             HBufC* favContactString = iContactDataManager->FavContactStringLC( i, nameOrder );
@@ -1169,7 +1208,8 @@
 //
 // -----------------------------------------------------------------------------
 //
-HBufC* CEasyDialingPlugin::CreateContactStringLC( CPsClientData* aResult, CPbkContactEngine::TPbkNameOrder aNameOrder )
+HBufC* CEasyDialingPlugin::CreateContactStringLC( CPsClientData* aResult,
+        CEasyDialingContactDataManager::TNameOrder aNameOrder )
     {
     TPtr firstName = aResult->Data( iFirstNamePCSIndex )->Des();
     TPtr lastName = aResult->Data( iLastNamePCSIndex )->Des();
@@ -1441,7 +1481,7 @@
             
             // Not only Number Entry is removed but also closes down number selection popup in case it happens to be open.
             iContactorService->CancelService();
-			ret = ETrue;
+            ret = ETrue;
             break;
             
         default:
@@ -1607,7 +1647,9 @@
             return;
         }
 
-    CEDContactorService::TCSParameter param( selector, *contact8, 0, *fullName );
+    CEDContactorService::TCSParameter param( selector, *contact8, 
+                                             CEDContactorService::TCSParameter::EEnableDefaults, 
+                                             *fullName );
 
     iContactorService->ExecuteServiceL( param );