phoneuis/easydialing/src/easydialingcontactdatamanager.cpp
branchRCL_3
changeset 23 40a3f856b14d
parent 20 3c221667e687
--- a/phoneuis/easydialing/src/easydialingcontactdatamanager.cpp	Thu Jul 15 18:38:16 2010 +0300
+++ b/phoneuis/easydialing/src/easydialingcontactdatamanager.cpp	Thu Aug 19 09:54:27 2010 +0300
@@ -21,6 +21,8 @@
 #include <CVPbkContactManager.h>
 #include <MVPbkContactStoreList.h>
 #include <MVPbkContactLink.h>
+#include <CPbk2StoreConfiguration.h>
+#include <CVPbkContactStoreUriArray.h>
 #include <VPbkContactStoreUris.h>
 #include <TVPbkContactStoreUriPtr.h>
 #include <CVPbkTopContactManager.h>
@@ -28,22 +30,20 @@
 #include <TVPbkStoreContactAnalyzer.h>
 #include <MVPbkFieldType.h>
 #include <VPbkEng.rsg>
-
 #include <MVPbkContactViewBase.h>
 #include <MVPbkBaseContactFieldCollection.h>
 #include <MVPbkContactFieldTextData.h>
 #include <MVPbkContactFieldData.h>
-
 #include <CVPbkContactLinkArray.h>
 #include <MVPbkContactLink.h>
 #include <MVPbkContactOperationBase.h>
 #include <MVPbkOperationObserver.h>
-#include <MVPbkContactStore.h>          // MVPbkContactStore
+#include <MVPbkContactStore.h>
+#include <MVPbkContactStoreProperties.h>
 #include <MVPbkStoreContact.h>
+#include <PbkGlobalSettingFactory.h>
 #include <centralrepository.h>
 
-#include <PbkGlobalSettingFactory.h>
-
 #include "easydialingcontactdata.h"
 #include "easydialingcontactdatamanager.h"
 #include "easydialingutils.h"
@@ -52,12 +52,30 @@
 #include "easydialinglogger.h"
 
 // ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::NewL
+// ---------------------------------------------------------------------------
+//
+CEasyDialingContactDataManager* CEasyDialingContactDataManager::NewL()
+    {
+    CEasyDialingContactDataManager* self = 
+            new ( ELeave ) CEasyDialingContactDataManager();
+    CleanupStack::PushL( self );
+    self->ConstructL();
+    CleanupStack::Pop( self );
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
 // CEasyDialingContactDataManager::CEasyDialingContactDataManager
 // ---------------------------------------------------------------------------
 //
-CEasyDialingContactDataManager::CEasyDialingContactDataManager(CVPbkContactManager* aContactManager)
-        : iImageOperation(NULL), iContactManager(aContactManager), iContactOperation(NULL),
-          iContactThumbnailSetting(ETrue), iStoreReady(EFalse)
+CEasyDialingContactDataManager::CEasyDialingContactDataManager()
+        : iPbkStoreConfiguration(NULL), 
+          iImageOperation(NULL), 
+          iContactManager(NULL), 
+          iContactOperation(NULL),
+          iContactThumbnailSetting(ETrue), 
+          iStoreReady(EFalse)
     {
     }
 
@@ -76,11 +94,19 @@
     delete iImageOperation;
     delete iContactOperation;
     delete iFavsView;
-    if (iContactStore)
+
+    if ( iContactManager )
         {
-        iContactStore->Close( *this);
+        TRAP_IGNORE( iContactManager->ContactStoresL().CloseAll( *this ) );
         }
+    delete iContactManager;
     
+    if ( iPbkStoreConfiguration )
+        {
+        iPbkStoreConfiguration->RemoveObserver( *this );
+        }
+    delete iPbkStoreConfiguration;
+
     if ( iPbkSettings )
         {
         iPbkSettings->Close();
@@ -94,31 +120,43 @@
 //
 void CEasyDialingContactDataManager::ConstructL()
     {
+    // Create contact store configuration handler
+    iPbkStoreConfiguration = CPbk2StoreConfiguration::NewL();
+    iPbkStoreConfiguration->AddObserverL( *this );
+    
+    // Create manager for all the supported contact stores
+    CVPbkContactStoreUriArray* supportedStores = 
+            iPbkStoreConfiguration->SupportedStoreConfigurationL();
+    CleanupStack::PushL( supportedStores );
+    iContactManager = CVPbkContactManager::NewL( *supportedStores );
+    CleanupStack::PopAndDestroy( supportedStores );
+    
+    // Open the stores and start observing them
+    iContactManager->ContactStoresL().OpenAllL( *this );
+
     iImageManager = CPbk2ImageManager::NewL(*iContactManager);
     
-    TVPbkContactStoreUriPtr uri( VPbkContactStoreUris::DefaultCntDbUri() );
-    iContactStore = iContactManager->ContactStoresL().Find( uri );
-
     iVPbkTopContactManager = CVPbkTopContactManager::NewL( *iContactManager );
 
     iImageManagerParams.iFlags = TPbk2ImageManagerParams::EScaleImage | TPbk2ImageManagerParams::EKeepAspectRatio;
     iThumbnailFieldType = iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_THUMBNAILPIC );
 
-    // Open the store
-    iContactStore->OpenL( *this );
-    
     // Read easydialing setting from cenrep.
     CRepository* cenrep = CRepository::NewL( KCRUidEasyDialSettings );
     CleanupStack::PushL( cenrep );
     User::LeaveIfError( cenrep->Get( KEasyDialingContactThumbnails, iContactThumbnailSetting ) );
     CleanupStack::PopAndDestroy( cenrep );
     
+    // Start observing Phoenbook setting for the name order
     iPbkSettings = PbkGlobalSettingFactory::CreatePersistentSettingL();
     iPbkSettings->ConnectL( MPbkGlobalSetting::EGeneralSettingCategory );
     iPbkSettings->RegisterObserverL( this );
 
     // Get name order from Phonebook settings
     UpdateNameOrderL();
+    
+    // Check if store with favourites is configured to be searched.
+    SetupFavStoreSearchedL();
     }
 
 // ---------------------------------------------------------------------------
@@ -131,6 +169,15 @@
     }
 
 // ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::ContactManager
+// ---------------------------------------------------------------------------
+//
+CVPbkContactManager& CEasyDialingContactDataManager::ContactManager()
+    {
+    return *iContactManager;
+    }
+
+// ---------------------------------------------------------------------------
 // CEasyDialingContactDataManager::SetThumbnailSize
 // ---------------------------------------------------------------------------
 //
@@ -161,12 +208,13 @@
     if (newIndex == KErrNotFound)
         {
         MVPbkContactLink* newLink = aContact->CloneLC();
-        CEasyDialingContactData *newThumbnail = new (ELeave) CEasyDialingContactData(newLink);
+        CEasyDialingContactData* newData = new (ELeave) CEasyDialingContactData(newLink);
         CleanupStack::Pop(); // newLink
         newIndex = iContactDataArray.Count();
-        CleanupStack::PushL(newThumbnail);
-        iContactDataArray.AppendL(newThumbnail);
-        CleanupStack::Pop(newThumbnail);
+        CleanupStack::PushL(newData);
+        iContactDataArray.AppendL(newData);
+        CleanupStack::Pop(newData);
+        SetStoreFlagsForContact(newData);
         }
     
     iContactDataArray[ newIndex ]->SetFav( aFav );
@@ -179,33 +227,41 @@
     }
 
 // ---------------------------------------------------------------------------
-// CEasyDialingContactDataManager::GetThumbnailAndFav 
+// CEasyDialingContactDataManager::IndexForId 
 // ---------------------------------------------------------------------------
 //
-TBool CEasyDialingContactDataManager::GetThumbnailAndFav(const TDesC& aId, CFbsBitmap*& aThumbnail, TBool& aFav)
+TInt CEasyDialingContactDataManager::IndexForId( const TDesC& aId ) const
     {
-    LOGSTRING("CEasyDialingContactDataManager: GetThumbnailAndFav");
     TUint idVal(0);
     TLex lex(aId);
     lex.Val(idVal, EHex);
+    return idVal;
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::GetThumbnail 
+// ---------------------------------------------------------------------------
+//
+TBool CEasyDialingContactDataManager::GetThumbnail( TInt aIndex, CFbsBitmap*& aThumbnail )
+    {
+    LOGSTRING("CEasyDialingContactDataManager: GetThumbnail");
     
     TBool retVal;
     
-    CEasyDialingContactData* thumbnail = iContactDataArray[idVal];
-    aFav = thumbnail->Fav();
-    if (thumbnail->IsLoaded())
+    CEasyDialingContactData* contactData = iContactDataArray[aIndex];
+    if ( contactData->IsLoaded() )
         {
-        aThumbnail = thumbnail->Thumbnail();
+        aThumbnail = contactData->Thumbnail();
         retVal = ETrue;
         }
     else
         {
         aThumbnail = NULL;
         retVal = EFalse;
-        if (iWaitingContacts.Find(idVal) == KErrNotFound)
+        if (iWaitingContacts.Find(aIndex) == KErrNotFound)
             {
-            LOGSTRING1("iWaitingContacts.Append %d", idVal);
-            iWaitingContacts.Append(idVal);
+            LOGSTRING1("iWaitingContacts.Append %d", aIndex);
+            iWaitingContacts.Append(aIndex);
             TRAPD(err, LoadNextContactDataL());
             if (err)
                 {
@@ -213,11 +269,41 @@
                 }
             }
         }    
-    LOGSTRING("CEasyDialingContactDataManager: GetThumbnailAndFav Exit");
+    LOGSTRING("CEasyDialingContactDataManager: GetThumbnail Exit");
     return retVal;
     }
 
 // ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::IsFav
+// ---------------------------------------------------------------------------
+//
+TBool CEasyDialingContactDataManager::IsFav( TInt aIndex ) const
+    {
+    CEasyDialingContactData* contactData = iContactDataArray[aIndex];
+    return contactData->Fav();
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::IsSimContact
+// ---------------------------------------------------------------------------
+//
+TBool CEasyDialingContactDataManager::IsSimContact( TInt aIndex ) const
+    {
+    CEasyDialingContactData* contactData = iContactDataArray[aIndex];
+    return contactData->IsSimContact();
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::IsSdnContact
+// ---------------------------------------------------------------------------
+//
+TBool CEasyDialingContactDataManager::IsSdnContact( TInt aIndex ) const
+    {
+    CEasyDialingContactData* contactData = iContactDataArray[aIndex];
+    return contactData->IsSdnContact();
+    }
+
+// ---------------------------------------------------------------------------
 // CEasyDialingContactDataManager::IsFavL
 // ---------------------------------------------------------------------------
 //
@@ -239,7 +325,7 @@
 //
 TInt CEasyDialingContactDataManager::NumberOfFavsL()
     {
-    if ( iFavsView && iFavsViewReady )
+    if ( iFavsView && iFavsViewReady && iFavStoreSearched )
         {
         return iFavsView->ContactCountL();
         }
@@ -255,7 +341,7 @@
 //
 MVPbkContactLink* CEasyDialingContactDataManager::FavLinkLC( TInt aIndex )
     {
-    if ( !iFavsView || !iFavsViewReady )
+    if ( !iFavsView || !iFavsViewReady || !iFavStoreSearched )
         {
         // LC function should not return normally unless it has actually
         // put something to cleanup stack
@@ -318,6 +404,23 @@
     }
 
 // ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::GetCurrentStoreUrisL
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::GetCurrentStoreUrisL( RPointerArray<TDesC>& aUris )
+    {
+    CVPbkContactStoreUriArray* storeUris = iPbkStoreConfiguration->CurrentConfigurationL();
+    CleanupStack::PushL( storeUris );
+    for ( TInt i = 0 ; i < storeUris->Count() ; ++i )
+        {
+        HBufC* dbUri = (*storeUris)[i].UriDes().AllocLC();
+        aUris.AppendL( dbUri );
+        CleanupStack::Pop( dbUri );
+        }
+    CleanupStack::PopAndDestroy( storeUris );
+    }
+
+// ---------------------------------------------------------------------------
 // CEasyDialingContactDataManager::Pause
 // ---------------------------------------------------------------------------
 //
@@ -388,17 +491,21 @@
     if ( !iImageOperation && !iContactOperation && iWaitingContacts.Count() && iStoreReady && !iPause )
         {
         // first we need to load the contact item
-        CEasyDialingContactData* tn = iContactDataArray[iWaitingContacts[0]];
-        iContactOperation = iContactManager->RetrieveContactL( *(tn->ContactLink()), *this);
-
-        if (!iContactOperation)
+        const TInt index( iWaitingContacts[0] );
+        
+        if ( index >= 0 && index < iContactDataArray.Count() )
             {
-            tn->LoadingComplete();
-            RDebug::Print(_L("iWaitingContacts.Remove %d"), iWaitingContacts[0]);            
-            iWaitingContacts.Remove(0);
-            LoadNextContactDataL();
+            CEasyDialingContactData* data = iContactDataArray[index];
+            iContactOperation = iContactManager->RetrieveContactL( *(data->ContactLink()), *this);
+            if (!iContactOperation)
+                {
+                data->LoadingComplete();
+                RDebug::Print(_L("iWaitingContacts.Remove %d"), iWaitingContacts[0]);
+                iWaitingContacts.Remove(0);
+                LoadNextContactDataL();
+                }
             }
-        }          
+        }
     LOGSTRING("CEasyDialingContactDataManager: LoadNextContactDataL Exit");
     }
 
@@ -410,9 +517,14 @@
 void CEasyDialingContactDataManager::Pbk2ImageGetComplete(MPbk2ImageOperation& aOperation, CFbsBitmap* aBitmap)
     {
     LOGSTRING("CEasyDialingContactDataManager: Pbk2ImageGetComplete");
-    TInt index = iWaitingContacts[0];
-    LOGSTRING1("iWaitingContacts.Remove %d", iWaitingContacts[0]);            
-    iWaitingContacts.Remove(0);
+    TInt index( KErrNotFound );
+    if ( iWaitingContacts.Count() > 0 )
+        {
+        index = iWaitingContacts[0];
+        LOGSTRING1("iWaitingContacts.Remove %d", iWaitingContacts[0]);
+        iWaitingContacts.Remove(0);
+        }
+    
     delete &aOperation;
     iImageOperation = NULL;
     delete iStoreContact;
@@ -437,6 +549,30 @@
     Pbk2ImageGetComplete(aOperation, NULL);
     }
 
+// -----------------------------------------------------------------------------
+// ConfigurationChanged
+// From MPbk2StoreConfigurationObserver
+// Called when contact store configuration changes
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::ConfigurationChanged()
+    {
+    TRAP_IGNORE( SetupFavStoreSearchedL() );
+    iObserver->StoreConfigurationChanged();
+    }
+
+// -----------------------------------------------------------------------------
+// ConfigurationChangedComplete
+// From MPbk2StoreConfigurationObserver
+// Called when contact store configuration change has been informed to all
+// observers
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::ConfigurationChangedComplete()
+    {
+    // no implementation needed
+    }
+
 // ---------------------------------------------------------------------------
 // CEasyDialingContactDataManager::SettingChangedL
 // From MPbkGlobalSettingObserver
@@ -509,13 +645,15 @@
 void CEasyDialingContactDataManager::DoHandleImageGetCompleteL(CFbsBitmap* aBitmap, TInt aIndex)
     {
     LOGSTRING("CEasyDialingContactDataManager: DoHandleImageGetCompleteL");
-    CEasyDialingContactData *tn = iContactDataArray[aIndex];
-    tn->LoadingComplete();
-    if (aBitmap)
+    if ( aIndex >= 0 && aIndex < iContactDataArray.Count() ) 
         {
-        tn->SetThumbnail(aBitmap);
+        CEasyDialingContactData* data = iContactDataArray[aIndex];
+        data->LoadingComplete();
+        if (aBitmap)
+            {
+            data->SetThumbnail(aBitmap);
+            }
         }
-    
     LoadNextContactDataL();
     InformObserver();
     LOGSTRING("CEasyDialingContactDataManager: DoHandleImageGetCompleteL Exit");
@@ -556,7 +694,7 @@
         }
     
     LOGSTRING1("CEasyDialingContactDataManager: VoiceCallAvailable returns %d", ret);
-    return ret;    
+    return ret;
     }
 
 
@@ -577,7 +715,7 @@
         }
     
     LOGSTRING1("CEasyDialingContactDataManager: VideoCallAvailable returns %d", ret);
-    return ret;    
+    return ret;
     }
 
 
@@ -598,7 +736,7 @@
         }
     
     LOGSTRING1("CEasyDialingContactDataManager: UniEditorAvailable returns %d", ret);
-    return ret;    
+    return ret;
     }
 
 
@@ -647,29 +785,20 @@
         iObserver->AllContactDataLoaded();
         }
     }
-    	
+
 // ---------------------------------------------------------------------------
 // CEasyDialingContactDataManager::StoreReady
-// from MVPbkContactStoreObserver
-// Called when the contact store is ready to be used, signals
-// the next engine state.
+// from MVPbkContactStoreListObserver
 // @param aContactStore The store that is ready.
 // ---------------------------------------------------------------------------
 //
-
 void CEasyDialingContactDataManager::StoreReady( MVPbkContactStore& /*aContactStore*/ )
     {
-    // next open the favourites view
-    TRAPD( err, iVPbkTopContactManager->GetTopContactsViewL( *this, *this ) );
-    if ( err )
-        {
-        HandleError( err );
-        }
     }
-    
+
 // ---------------------------------------------------------------------------
 // CEasyDialingContactDataManager::StoreUnavailable
-// from MVPbkContactStoreObserver
+// from MVPbkContactStoreListObserver
 // Called when a contact store becomes unavailable.
 // @param aContactStore The store that became unavailable.
 // @param aReason The reason why the store is unavailable.
@@ -679,27 +808,46 @@
 void CEasyDialingContactDataManager::StoreUnavailable( MVPbkContactStore& /*aContactStore*/,
         TInt /*aReason*/ )
     {
-    // Opening main contact database failed. Easydialing can operate without
-    // it, but thumbnails and favourite stars can't be shown, and availability
-    // of action menu items can't be checked.
+    // Opening some contact database failed. Easydialing can operate without
+    // any database connections, but thumbnails and favourite stars can't be 
+    // shown, and availability of action menu items can't be checked.
     //   Of course, if easydialing can't open the database, probably PCSServer
     // can't open it either...
     }
 
 // ---------------------------------------------------------------------------
 // CEasyDialingContactDataManager::HandleStoreEventL
-// from MVPbkContactStoreObserver
+// from MVPbkContactStoreListObserver
 // Called when changes occur in the contact store.
-// IGNORED.
+// IGNORED because ED plugin reacts to contact modifications by listening
+// to PCS cache update events.
 // @param aContactStore A store whose event it is.
 // @param aStoreEvent The event that has occurred.
 // ---------------------------------------------------------------------------
 //
-void CEasyDialingContactDataManager::HandleStoreEventL(MVPbkContactStore& /*aContactStore*/,
-        TVPbkContactStoreEvent /*aStoreEvent*/)
+void CEasyDialingContactDataManager::HandleStoreEventL( MVPbkContactStore& /*aContactStore*/,
+        TVPbkContactStoreEvent /*aStoreEvent*/ )
     {
     }
 
+// -----------------------------------------------------------------------------
+// CEasyDialingPlugin::OpenComplete
+// From MVPbkContactStoreListObserver.
+// Called when all contact stores are ready to be used, signals
+// the next engine state.
+//
+// -----------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::OpenComplete()
+    {
+    // next open the favourites view
+    TRAPD( err, iVPbkTopContactManager->GetTopContactsViewL( *this, *this ) );
+    if ( err )
+        {
+        HandleError( err );
+        }
+    }
+
 // ---------------------------------------------------------------------------
 // CEasyDialingContactDataManager::VPbkOperationFailed
 // ---------------------------------------------------------------------------
@@ -711,7 +859,7 @@
     // Loading list of favourite contacts failed.
     // Continue as if none of the contacts are favourited.
     delete iFavsOperation;
-    iFavsOperation = NULL;        
+    iFavsOperation = NULL;
     delete iFavsView;
     iFavsView = NULL;
     iFavsViewReady = EFalse;
@@ -843,10 +991,9 @@
         // Find out the available communication methods for the contact.
         GetAvailableServicesL( aContact, aIndex );
         
-                
         // Next initiate async thumbnail get operation.
         
-        if(GetContactThumbnailSetting()) // reads the iContactThumbnailSetting value if it is false we dont fetch images
+        if (GetContactThumbnailSetting()) // reads the iContactThumbnailSetting value if it is false we dont fetch images
             {
             if (iImageManager->HasImage(*iStoreContact, *iThumbnailFieldType))
                 {
@@ -861,7 +1008,7 @@
             {
             CEasyDialingContactData *tn = iContactDataArray[aIndex];
             tn->LoadingComplete();
-            LOGSTRING1("iWaitingContacts.Remove %d", iWaitingContacts[0]);            
+            LOGSTRING1("iWaitingContacts.Remove %d", iWaitingContacts[0]);
             iWaitingContacts.Remove(0);
             delete iStoreContact;
             iStoreContact = NULL;
@@ -872,9 +1019,9 @@
     else
         {
         // Opening contact failed. Mark contact data loaded, so it's not opened again.
-        CEasyDialingContactData *tn = iContactDataArray[aIndex];
-        tn->LoadingComplete();
-        LOGSTRING1("iWaitingContacts.Remove %d", iWaitingContacts[0]);            
+        CEasyDialingContactData* data = iContactDataArray[aIndex];
+        data->LoadingComplete();
+        LOGSTRING1("iWaitingContacts.Remove %d", iWaitingContacts[0]);
         iWaitingContacts.Remove(0);
         LoadNextContactDataL();
         InformObserver();
@@ -924,13 +1071,17 @@
     LOGSTRING("CEasyDialingContactDataManager: VPbkSingleContactOperationComplete");
     delete &aOperation;
     iContactOperation = NULL;
-    TInt index = iWaitingContacts[0];
-    LOGSTRING1("VPbkSingleContactOperationComplete, Index=%d", index);
-    TRAPD(err, DoHandleContactOperationCompleteL(aContact, index));
-    if (err)
+    if ( iWaitingContacts.Count() > 0 )
         {
-        HandleError(err);
+        TInt index = iWaitingContacts[0];
+        LOGSTRING1("VPbkSingleContactOperationComplete, Index=%d", index);
+        TRAPD(err, DoHandleContactOperationCompleteL(aContact, index));
+        if ( err )
+            {
+            HandleError(err);
+            }
         }
+    
     LOGSTRING("CEasyDialingContactDataManager: VPbkSingleContactOperationComplete Exit");
     }
 
@@ -999,6 +1150,38 @@
         }
     }
 
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::SetupFavStoreSearchedL
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::SetupFavStoreSearchedL()
+    {
+    // Check if favourite contact store (i.e. the default contact store) is one
+    // of the stores configured to be searched.
+    CVPbkContactStoreUriArray* storeUris = 
+            iPbkStoreConfiguration->CurrentConfigurationL();
+    iFavStoreSearched = 
+            storeUris->IsIncluded( VPbkContactStoreUris::DefaultCntDbUri() );
+    delete storeUris;
+    }
+
+// ---------------------------------------------------------------------------
+// CEasyDialingContactDataManager::SetStoreFlagsForContact
+// ---------------------------------------------------------------------------
+//
+void CEasyDialingContactDataManager::SetStoreFlagsForContact( 
+        CEasyDialingContactData* aContactData ) const
+    {
+    MVPbkContactLink* link = aContactData->ContactLink();
+    const TDesC& uri = link->ContactStore().StoreProperties().Uri().UriDes();
+    
+    TBool isSim = ( uri.Compare( VPbkContactStoreUris::SimGlobalAdnUri() ) == 0 );
+    aContactData->SetSimContact( isSim );
+    
+    TBool isSdn = ( uri.Compare( VPbkContactStoreUris::SimGlobalSdnUri() ) == 0 );
+    aContactData->SetSdnContact( isSdn );
+    }
+
 
 //  End of File