--- a/phoneuis/easydialing/src/easydialingcontactdatamanager.cpp Wed Sep 15 12:12:21 2010 +0300
+++ b/phoneuis/easydialing/src/easydialingcontactdatamanager.cpp Wed Oct 13 14:31:22 2010 +0300
@@ -21,8 +21,6 @@
#include <CVPbkContactManager.h>
#include <MVPbkContactStoreList.h>
#include <MVPbkContactLink.h>
-#include <CPbk2StoreConfiguration.h>
-#include <CVPbkContactStoreUriArray.h>
#include <VPbkContactStoreUris.h>
#include <TVPbkContactStoreUriPtr.h>
#include <CVPbkTopContactManager.h>
@@ -30,19 +28,21 @@
#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>
-#include <MVPbkContactStoreProperties.h>
+#include <MVPbkContactStore.h> // MVPbkContactStore
#include <MVPbkStoreContact.h>
+#include <centralrepository.h>
+
#include <PbkGlobalSettingFactory.h>
-#include <centralrepository.h>
#include "easydialingcontactdata.h"
#include "easydialingcontactdatamanager.h"
@@ -52,30 +52,12 @@
#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()
- : iPbkStoreConfiguration(NULL),
- iImageOperation(NULL),
- iContactManager(NULL),
- iContactOperation(NULL),
- iContactThumbnailSetting(ETrue),
- iStoreReady(EFalse)
+CEasyDialingContactDataManager::CEasyDialingContactDataManager(CVPbkContactManager* aContactManager)
+ : iImageOperation(NULL), iContactManager(aContactManager), iContactOperation(NULL),
+ iContactThumbnailSetting(ETrue), iStoreReady(EFalse)
{
}
@@ -94,19 +76,11 @@
delete iImageOperation;
delete iContactOperation;
delete iFavsView;
-
- if ( iContactManager )
+ if (iContactStore)
{
- TRAP_IGNORE( iContactManager->ContactStoresL().CloseAll( *this ) );
+ iContactStore->Close( *this);
}
- delete iContactManager;
- if ( iPbkStoreConfiguration )
- {
- iPbkStoreConfiguration->RemoveObserver( *this );
- }
- delete iPbkStoreConfiguration;
-
if ( iPbkSettings )
{
iPbkSettings->Close();
@@ -120,43 +94,31 @@
//
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();
}
// ---------------------------------------------------------------------------
@@ -169,15 +131,6 @@
}
// ---------------------------------------------------------------------------
-// CEasyDialingContactDataManager::ContactManager
-// ---------------------------------------------------------------------------
-//
-CVPbkContactManager& CEasyDialingContactDataManager::ContactManager()
- {
- return *iContactManager;
- }
-
-// ---------------------------------------------------------------------------
// CEasyDialingContactDataManager::SetThumbnailSize
// ---------------------------------------------------------------------------
//
@@ -208,13 +161,12 @@
if (newIndex == KErrNotFound)
{
MVPbkContactLink* newLink = aContact->CloneLC();
- CEasyDialingContactData* newData = new (ELeave) CEasyDialingContactData(newLink);
+ CEasyDialingContactData *newThumbnail = new (ELeave) CEasyDialingContactData(newLink);
CleanupStack::Pop(); // newLink
newIndex = iContactDataArray.Count();
- CleanupStack::PushL(newData);
- iContactDataArray.AppendL(newData);
- CleanupStack::Pop(newData);
- SetStoreFlagsForContact(newData);
+ CleanupStack::PushL(newThumbnail);
+ iContactDataArray.AppendL(newThumbnail);
+ CleanupStack::Pop(newThumbnail);
}
iContactDataArray[ newIndex ]->SetFav( aFav );
@@ -227,41 +179,33 @@
}
// ---------------------------------------------------------------------------
-// CEasyDialingContactDataManager::IndexForId
+// CEasyDialingContactDataManager::GetThumbnailAndFav
// ---------------------------------------------------------------------------
//
-TInt CEasyDialingContactDataManager::IndexForId( const TDesC& aId ) const
+TBool CEasyDialingContactDataManager::GetThumbnailAndFav(const TDesC& aId, CFbsBitmap*& aThumbnail, TBool& aFav)
{
+ 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* contactData = iContactDataArray[aIndex];
- if ( contactData->IsLoaded() )
+ CEasyDialingContactData* thumbnail = iContactDataArray[idVal];
+ aFav = thumbnail->Fav();
+ if (thumbnail->IsLoaded())
{
- aThumbnail = contactData->Thumbnail();
+ aThumbnail = thumbnail->Thumbnail();
retVal = ETrue;
}
else
{
aThumbnail = NULL;
retVal = EFalse;
- if (iWaitingContacts.Find(aIndex) == KErrNotFound)
+ if (iWaitingContacts.Find(idVal) == KErrNotFound)
{
- LOGSTRING1("iWaitingContacts.Append %d", aIndex);
- iWaitingContacts.Append(aIndex);
+ LOGSTRING1("iWaitingContacts.Append %d", idVal);
+ iWaitingContacts.Append(idVal);
TRAPD(err, LoadNextContactDataL());
if (err)
{
@@ -269,41 +213,11 @@
}
}
}
- LOGSTRING("CEasyDialingContactDataManager: GetThumbnail Exit");
+ LOGSTRING("CEasyDialingContactDataManager: GetThumbnailAndFav 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
// ---------------------------------------------------------------------------
//
@@ -325,7 +239,7 @@
//
TInt CEasyDialingContactDataManager::NumberOfFavsL()
{
- if ( iFavsView && iFavsViewReady && iFavStoreSearched )
+ if ( iFavsView && iFavsViewReady )
{
return iFavsView->ContactCountL();
}
@@ -341,7 +255,7 @@
//
MVPbkContactLink* CEasyDialingContactDataManager::FavLinkLC( TInt aIndex )
{
- if ( !iFavsView || !iFavsViewReady || !iFavStoreSearched )
+ if ( !iFavsView || !iFavsViewReady )
{
// LC function should not return normally unless it has actually
// put something to cleanup stack
@@ -404,23 +318,6 @@
}
// ---------------------------------------------------------------------------
-// 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
// ---------------------------------------------------------------------------
//
@@ -491,21 +388,17 @@
if ( !iImageOperation && !iContactOperation && iWaitingContacts.Count() && iStoreReady && !iPause )
{
// first we need to load the contact item
- const TInt index( iWaitingContacts[0] );
-
- if ( index >= 0 && index < iContactDataArray.Count() )
+ CEasyDialingContactData* tn = iContactDataArray[iWaitingContacts[0]];
+ iContactOperation = iContactManager->RetrieveContactL( *(tn->ContactLink()), *this);
+
+ if (!iContactOperation)
{
- 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();
- }
+ tn->LoadingComplete();
+ RDebug::Print(_L("iWaitingContacts.Remove %d"), iWaitingContacts[0]);
+ iWaitingContacts.Remove(0);
+ LoadNextContactDataL();
}
- }
+ }
LOGSTRING("CEasyDialingContactDataManager: LoadNextContactDataL Exit");
}
@@ -517,14 +410,9 @@
void CEasyDialingContactDataManager::Pbk2ImageGetComplete(MPbk2ImageOperation& aOperation, CFbsBitmap* aBitmap)
{
LOGSTRING("CEasyDialingContactDataManager: Pbk2ImageGetComplete");
- TInt index( KErrNotFound );
- if ( iWaitingContacts.Count() > 0 )
- {
- index = iWaitingContacts[0];
- LOGSTRING1("iWaitingContacts.Remove %d", iWaitingContacts[0]);
- iWaitingContacts.Remove(0);
- }
-
+ TInt index = iWaitingContacts[0];
+ LOGSTRING1("iWaitingContacts.Remove %d", iWaitingContacts[0]);
+ iWaitingContacts.Remove(0);
delete &aOperation;
iImageOperation = NULL;
delete iStoreContact;
@@ -549,30 +437,6 @@
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
@@ -645,15 +509,13 @@
void CEasyDialingContactDataManager::DoHandleImageGetCompleteL(CFbsBitmap* aBitmap, TInt aIndex)
{
LOGSTRING("CEasyDialingContactDataManager: DoHandleImageGetCompleteL");
- if ( aIndex >= 0 && aIndex < iContactDataArray.Count() )
+ CEasyDialingContactData *tn = iContactDataArray[aIndex];
+ tn->LoadingComplete();
+ if (aBitmap)
{
- CEasyDialingContactData* data = iContactDataArray[aIndex];
- data->LoadingComplete();
- if (aBitmap)
- {
- data->SetThumbnail(aBitmap);
- }
+ tn->SetThumbnail(aBitmap);
}
+
LoadNextContactDataL();
InformObserver();
LOGSTRING("CEasyDialingContactDataManager: DoHandleImageGetCompleteL Exit");
@@ -694,7 +556,7 @@
}
LOGSTRING1("CEasyDialingContactDataManager: VoiceCallAvailable returns %d", ret);
- return ret;
+ return ret;
}
@@ -715,7 +577,7 @@
}
LOGSTRING1("CEasyDialingContactDataManager: VideoCallAvailable returns %d", ret);
- return ret;
+ return ret;
}
@@ -736,7 +598,7 @@
}
LOGSTRING1("CEasyDialingContactDataManager: UniEditorAvailable returns %d", ret);
- return ret;
+ return ret;
}
@@ -785,20 +647,29 @@
iObserver->AllContactDataLoaded();
}
}
-
+
// ---------------------------------------------------------------------------
// CEasyDialingContactDataManager::StoreReady
-// from MVPbkContactStoreListObserver
+// from MVPbkContactStoreObserver
+// Called when the contact store is ready to be used, signals
+// the next engine state.
// @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 MVPbkContactStoreListObserver
+// from MVPbkContactStoreObserver
// Called when a contact store becomes unavailable.
// @param aContactStore The store that became unavailable.
// @param aReason The reason why the store is unavailable.
@@ -808,46 +679,27 @@
void CEasyDialingContactDataManager::StoreUnavailable( MVPbkContactStore& /*aContactStore*/,
TInt /*aReason*/ )
{
- // 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.
+ // 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.
// Of course, if easydialing can't open the database, probably PCSServer
// can't open it either...
}
// ---------------------------------------------------------------------------
// CEasyDialingContactDataManager::HandleStoreEventL
-// from MVPbkContactStoreListObserver
+// from MVPbkContactStoreObserver
// Called when changes occur in the contact store.
-// IGNORED because ED plugin reacts to contact modifications by listening
-// to PCS cache update events.
+// IGNORED.
// @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
// ---------------------------------------------------------------------------
@@ -859,7 +711,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;
@@ -991,9 +843,10 @@
// 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))
{
@@ -1008,7 +861,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;
@@ -1019,9 +872,9 @@
else
{
// Opening contact failed. Mark contact data loaded, so it's not opened again.
- CEasyDialingContactData* data = iContactDataArray[aIndex];
- data->LoadingComplete();
- LOGSTRING1("iWaitingContacts.Remove %d", iWaitingContacts[0]);
+ CEasyDialingContactData *tn = iContactDataArray[aIndex];
+ tn->LoadingComplete();
+ LOGSTRING1("iWaitingContacts.Remove %d", iWaitingContacts[0]);
iWaitingContacts.Remove(0);
LoadNextContactDataL();
InformObserver();
@@ -1071,17 +924,13 @@
LOGSTRING("CEasyDialingContactDataManager: VPbkSingleContactOperationComplete");
delete &aOperation;
iContactOperation = NULL;
- if ( iWaitingContacts.Count() > 0 )
+ TInt index = iWaitingContacts[0];
+ LOGSTRING1("VPbkSingleContactOperationComplete, Index=%d", index);
+ TRAPD(err, DoHandleContactOperationCompleteL(aContact, index));
+ if (err)
{
- TInt index = iWaitingContacts[0];
- LOGSTRING1("VPbkSingleContactOperationComplete, Index=%d", index);
- TRAPD(err, DoHandleContactOperationCompleteL(aContact, index));
- if ( err )
- {
- HandleError(err);
- }
+ HandleError(err);
}
-
LOGSTRING("CEasyDialingContactDataManager: VPbkSingleContactOperationComplete Exit");
}
@@ -1150,38 +999,6 @@
}
}
-// ---------------------------------------------------------------------------
-// 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