diff -r e30d4a1b8bad -r c26cc2a7c548 phoneuis/easydialing/src/easydialingcontactdatamanager.cpp --- 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 #include #include -#include -#include #include #include #include @@ -30,19 +28,21 @@ #include #include #include + #include #include #include #include + #include #include #include #include -#include -#include +#include // MVPbkContactStore #include +#include + #include -#include #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& 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