# HG changeset patch # User Dremov Kirill (Nokia-D-MSW/Tampere) # Date 1273582821 -10800 # Node ID 2828b4d142c09bd12d8d9a40bf83eb2f66007528 # Parent 0d28c1c5b6dd303ba059909fbcfccf601a79073b Revision: 201017 Kit: 201019 diff -r 0d28c1c5b6dd -r 2828b4d142c0 ccservices/cmsservices/cmsengine/Server/inc/cmsphonebookproxy.h --- a/ccservices/cmsservices/cmsengine/Server/inc/cmsphonebookproxy.h Tue Apr 27 16:23:35 2010 +0300 +++ b/ccservices/cmsservices/cmsengine/Server/inc/cmsphonebookproxy.h Tue May 11 16:00:21 2010 +0300 @@ -187,6 +187,11 @@ * Set default attribute for voice call */ void SetVoiceCallDefaultL( MVPbkStoreContact* aContact ); + + /** + * Set contact + */ + void SetContact( MVPbkStoreContact* aContact ); public: @@ -323,7 +328,14 @@ /// Array to keep a list of installed xSP stores. Owned. CDesCArrayFlat ixSPStoresArray; /// Default setting handle - CmsSetVoiceCallDefault* iSetDefault; + CmsSetVoiceCallDefault* iSetDefault; + // Current contact, not Owned + MVPbkStoreContact* iContact; + // ETrue, if the current activated contact store ready + TBool iCurrentContactStoreReady; + // Completed stores + RPointerArray iReadyStores; + }; #endif //__CMSPHONEBOOKPROXY__ diff -r 0d28c1c5b6dd -r 2828b4d142c0 ccservices/cmsservices/cmsengine/Server/src/cmsphonebookproxy.cpp --- a/ccservices/cmsservices/cmsengine/Server/src/cmsphonebookproxy.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/ccservices/cmsservices/cmsengine/Server/src/cmsphonebookproxy.cpp Tue May 11 16:00:21 2010 +0300 @@ -41,6 +41,7 @@ #include "cmsfindlinkedcontact.h" #include +#include // CONSTANTS const TInt KArrayGranularity = 2; @@ -111,7 +112,8 @@ iStoreConfiguration = NULL; } iObserverArray.Close(); - ixSPStoresArray.Reset(); + ixSPStoresArray.Reset(); + iReadyStores.ResetAndDestroy(); delete iSetDefault; } @@ -122,7 +124,7 @@ // TBool CCmsPhonebookProxy::StoreOpenStatus() { - if(iAtLeastOneStoreReady && iOpenComplete) + if( iAtLeastOneStoreReady && iOpenComplete && iCurrentContactStoreReady ) { return ETrue; } @@ -138,8 +140,11 @@ void CCmsPhonebookProxy::InitStoresL() { PRINT ( _L("Start CCmsPhonebookProxy::InitStoresL()") ); + if( !iOpenComplete ) { + iCurrentContactStoreReady = EFalse; + iReadyStores.ResetAndDestroy(); iStoreList->OpenAllL( *this ); } PRINT ( _L("End CCmsPhonebookProxy::InitStoresL()") ); @@ -414,6 +419,47 @@ } // ---------------------------------------------------------- +// CCmsPhonebookProxy::SetContact +// +// ---------------------------------------------------------- +// +void CCmsPhonebookProxy::SetContact( MVPbkStoreContact* aContact ) + { + iContact = aContact; + + if( !iCurrentContactStoreReady && iContact ) + { + for( TInt x=0; xDes().CompareC( + iContact->ContactStore().StoreProperties().Uri().UriDes() ) == 0 ) + { + + iCurrentContactStoreReady = ETrue; + iCmsPhonebookOperationsObserver.StoreOpenComplete(); + break; + } + } + } + // Check in case the contact has changed + else if( iCurrentContactStoreReady && iContact ) + { + iCurrentContactStoreReady = EFalse; + + for( TInt x=0; xDes().Compare( + iContact->ContactStore().StoreProperties().Uri().UriDes() ) == 0 ) + { + // Contact found from ready stores + iCurrentContactStoreReady = ETrue; + break; + } + } + } + } + +// ---------------------------------------------------------- // CCmsPhonebookProxy::ExternalStoresIntalled // // ---------------------------------------------------------- @@ -442,9 +488,10 @@ { PRINT( _L("Start CCmsPhonebookProxy::OpenComplete()" ) ); iOpenComplete = ETrue; - if ( iAtLeastOneStoreReady ) - { + if ( iAtLeastOneStoreReady && !iCurrentContactStoreReady ) + { iCmsPhonebookOperationsObserver.StoreOpenComplete(); + iCurrentContactStoreReady = ETrue; } PRINT( _L("End CCmsPhonebookProxy::OpenComplete()" ) ); } @@ -518,6 +565,7 @@ // void CCmsPhonebookProxy::StoreReady( MVPbkContactStore& aContactStore ) { + PRINT1( _L( "CCmsPhonebookProxy::StoreReady(): Store: %S" ), (&aContactStore.StoreProperties().Uri().UriDes()) ); //Set iAtLeastOneStoreReady to ETrue to indicate that //at least one store is available @@ -527,6 +575,20 @@ { iContactStore = &aContactStore; } + + TRAP_IGNORE( + { + HBufC* buf = aContactStore.StoreProperties().Uri().UriDes().AllocLC(); + iReadyStores.AppendL( buf ); + CleanupStack::Pop( buf ); + } ); + + if( iContact && iContact->ContactStore().StoreProperties().Uri().UriDes().Compare( + aContactStore.StoreProperties().Uri().UriDes() ) == 0 && !iCurrentContactStoreReady ) + { + iCurrentContactStoreReady = ETrue; + iCmsPhonebookOperationsObserver.StoreOpenComplete(); + } } // ---------------------------------------------------------- @@ -604,7 +666,7 @@ // Support all contact stores, not only those defined by phonebook2 setting iUriList = iStoreConfiguration->SupportedStoreConfigurationL(); - + ixSPStoresArray.Reset(); FindXSPStoresL( ixSPStoresArray ); @@ -746,7 +808,7 @@ ResetData(); CompleteContactRequestL( aError, NULL ); - iCmsPhonebookOperationsObserver.CmsSingleContactOperationComplete( aError ); + iCmsPhonebookOperationsObserver.CmsSingleContactOperationComplete( aError ); } diff -r 0d28c1c5b6dd -r 2828b4d142c0 ccservices/cmsservices/cmsengine/Server/src/cmsservercontact.cpp --- a/ccservices/cmsservices/cmsengine/Server/src/cmsservercontact.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/ccservices/cmsservices/cmsengine/Server/src/cmsservercontact.cpp Tue May 11 16:00:21 2010 +0300 @@ -103,7 +103,7 @@ CCmsServerContact::~CCmsServerContact() { PRINT( _L( "Start CCmsServerContact::~CCmsServerContact()" ) ); - + iCmsServer.PhonebookProxyHandle().RemoveObserver( this ); if ( iPresenceNotifySubscribed && iContactLink ) @@ -117,12 +117,16 @@ iChatHandler->UnsubscribeBrandingForContact( iContactLink, this ); } } + delete iContact; + iContact = NULL; + + iCmsServer.PhonebookProxyHandle().SetContact( iContact ); + delete iStoreUri; delete iChatHandler; delete iVoipHandler; delete iXSPContactHandler; - delete iContactLink; - delete iContact; + delete iContactLink; delete iCachedField8; delete iAsyncContact; delete iCachedField16; @@ -227,6 +231,7 @@ PRINT( _L( "CCmsServerContact::OfferContactEventL(): Contact deleted, invalidate this subsession" ) ); delete iContact; iContact = NULL; + iCmsServer.PhonebookProxyHandle().SetContact( iContact ); iContactDeleted = ETrue; } else @@ -642,6 +647,8 @@ CreateContactLinkArrayL(); uri.Set( aContact->ParentStore().StoreProperties().Uri().UriDes() ); ParseContactStore( uri ); + + iCmsServer.PhonebookProxyHandle().SetContact( iContact ); } } diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/cca_view_plugin_api/inc/ccappviewpluginaknview.h --- a/contacts_plat/cca_view_plugin_api/inc/ccappviewpluginaknview.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/cca_view_plugin_api/inc/ccappviewpluginaknview.h Tue May 11 16:00:21 2010 +0300 @@ -19,8 +19,8 @@ #define CCAPPVIEWPLUGINAKNVIEW_H #ifndef __CCAPPUTILUNITTESTMODE -#include -#include +#include +#include #endif //__CCAPPUTILUNITTESTMODE class CCCAppViewPluginAknContainer; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/phonebook_2_common_ui_api/inc/MPbk2ApplicationServices.h --- a/contacts_plat/phonebook_2_common_ui_api/inc/MPbk2ApplicationServices.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/phonebook_2_common_ui_api/inc/MPbk2ApplicationServices.h Tue May 11 16:00:21 2010 +0300 @@ -22,7 +22,7 @@ // INCLUDES #include -#include // for TVPbkLocalVariantFlags +#include // for TVPbkLocalVariantFlags // FORWARD DECLARATIONS class CVPbkContactManager; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/phonebook_2_common_ui_api/inc/MPbk2StartupObserver.h --- a/contacts_plat/phonebook_2_common_ui_api/inc/MPbk2StartupObserver.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/phonebook_2_common_ui_api/inc/MPbk2StartupObserver.h Tue May 11 16:00:21 2010 +0300 @@ -21,7 +21,7 @@ // INCLUDES #include -#include +#include // CLASS DECLARATION diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/phonebook_2_common_ui_api/inc/MPbk2ViewExplorer.h --- a/contacts_plat/phonebook_2_common_ui_api/inc/MPbk2ViewExplorer.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/phonebook_2_common_ui_api/inc/MPbk2ViewExplorer.h Tue May 11 16:00:21 2010 +0300 @@ -21,7 +21,7 @@ // INCLUDES #include -#include +#include #include // TVwsViewId // FORWARD DECLARATIONS diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/phonebook_2_presentation_api/inc/MPbk2ContactNameFormatter.h --- a/contacts_plat/phonebook_2_presentation_api/inc/MPbk2ContactNameFormatter.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/phonebook_2_presentation_api/inc/MPbk2ContactNameFormatter.h Tue May 11 16:00:21 2010 +0300 @@ -53,7 +53,10 @@ /// characters with space character EReplaceNonGraphicChars = 0x0004, /// Formatter to retain all original space characters - EPreserveAllOriginalSpaces = 0x0008 + EPreserveAllOriginalSpaces = 0x0008, + /// Formatter by default uses coma separator + /// for separating company name + EDisableCompanyNameSeparator = 0x0010 }; /** diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/phonebook_2_presentation_api/inc/MPbk2FieldProperty.h --- a/contacts_plat/phonebook_2_presentation_api/inc/MPbk2FieldProperty.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/phonebook_2_presentation_api/inc/MPbk2FieldProperty.h Tue May 11 16:00:21 2010 +0300 @@ -21,7 +21,7 @@ // INCLUDE FILES #include -#include +#include // FORWARD DECLARATIONS class MVPbkFieldType; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/phonebook_2_ui_controls_api/inc/MPbk2ContactEditorControl.h --- a/contacts_plat/phonebook_2_ui_controls_api/inc/MPbk2ContactEditorControl.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/phonebook_2_ui_controls_api/inc/MPbk2ContactEditorControl.h Tue May 11 16:00:21 2010 +0300 @@ -20,7 +20,7 @@ #define MPBK2CONTACTEDITORCONTROL_H // INCLUDES -#include // TPbk2FieldCtrlType +#include // TPbk2FieldCtrlType // FORWARD DECLATIONS class MPbk2ContactEditorField; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/phonebook_2_ui_controls_api/inc/MPbk2ContactEditorEventObserver.h --- a/contacts_plat/phonebook_2_ui_controls_api/inc/MPbk2ContactEditorEventObserver.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/phonebook_2_ui_controls_api/inc/MPbk2ContactEditorEventObserver.h Tue May 11 16:00:21 2010 +0300 @@ -21,7 +21,7 @@ // INCLUDES #include -#include +#include // CLASS DECLARATION diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2AppUiExtension.h --- a/contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2AppUiExtension.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2AppUiExtension.h Tue May 11 16:00:21 2010 +0300 @@ -20,7 +20,7 @@ #define MPBK2APPUIEXTENSION_H // INCLUDES -#include +#include // FORWARD DECLARATIONS class MPbk2StartupMonitor; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2ContactEditorExtension.h --- a/contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2ContactEditorExtension.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2ContactEditorExtension.h Tue May 11 16:00:21 2010 +0300 @@ -20,8 +20,8 @@ #define MPBK2CONTACTEDITOREXTENSION_H // INCLUDES -#include -#include +#include +#include // FORWARD DECLARATIONS class MVPbkStoreContactField; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2ContactUiControlExtension.h --- a/contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2ContactUiControlExtension.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2ContactUiControlExtension.h Tue May 11 16:00:21 2010 +0300 @@ -20,8 +20,8 @@ #define MPBK2CONTACTUICONTROLEXTENSION_H // INCLUDES -#include -#include +#include +#include // FORWARD DECLARATIONS class MVPbkViewContact; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2SettingsViewExtension.h --- a/contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2SettingsViewExtension.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/phonebook_2_ui_extension_api/inc/MPbk2SettingsViewExtension.h Tue May 11 16:00:21 2010 +0300 @@ -20,7 +20,7 @@ #define MPBK2SETTINGSVIEWEXTENSION_H // INCLUDES -#include +#include // FORWARD DECLARATIONS class MPbk2SettingsControlExtension; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/predictivesearch_utils_api/inc/CPcsDefs.h --- a/contacts_plat/predictivesearch_utils_api/inc/CPcsDefs.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/predictivesearch_utils_api/inc/CPcsDefs.h Tue May 11 16:00:21 2010 +0300 @@ -128,7 +128,7 @@ const TUid KPcsAlgorithm1 = { 0x2000B5BE }; const TUid KPsDataStoreInterfaceUid = { 0x2000B5C0 }; -const TInt KLinksToFetchInOneGo = 500; +const TInt KLinksToFetchInOneGo = 20; /** * Max number of supported languages for Key Map diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_copy_policy_api/inc/phonebook/CVPbkContactCopyPolicy.h --- a/contacts_plat/virtual_phonebook_copy_policy_api/inc/phonebook/CVPbkContactCopyPolicy.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_copy_policy_api/inc/phonebook/CVPbkContactCopyPolicy.h Tue May 11 16:00:21 2010 +0300 @@ -30,7 +30,7 @@ // INCLUDES #include #include -#include +#include // FORWARD DECLARATIONS class CVPbkContactManager; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/CVPbkContactFieldIterator.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkContactFieldIterator.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkContactFieldIterator.h Tue May 11 16:00:21 2010 +0300 @@ -21,7 +21,7 @@ // INCLUDES #include -#include +#include // FORWARD DECLARATIONS class MVPbkStoreContactFieldCollection; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/CVPbkContactLinkArray.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkContactLinkArray.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkContactLinkArray.h Tue May 11 16:00:21 2010 +0300 @@ -21,7 +21,7 @@ // INCLUDES #include -#include +#include // FORWARD DECLARATIONS class MVPbkContactStoreList; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/CVPbkContactManager.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkContactManager.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkContactManager.h Tue May 11 16:00:21 2010 +0300 @@ -27,7 +27,7 @@ #include #include #include -#include +#include // FORWARD DECLARATIONS class MVPbkFieldTypeList; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/CVPbkDefaultAttribute.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkDefaultAttribute.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkDefaultAttribute.h Tue May 11 16:00:21 2010 +0300 @@ -21,10 +21,10 @@ // INCLUDE FILES #include -#include -#include -#include -#include +#include +#include +#include +#include // CLASS DECLARATIONS diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFieldFilter.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFieldFilter.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFieldFilter.h Tue May 11 16:00:21 2010 +0300 @@ -21,7 +21,7 @@ // INCLUDES #include -#include +#include // FORWARD DECLARATIONS class MVPbkContactFieldSelector; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFieldTypeRefsList.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFieldTypeRefsList.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFieldTypeRefsList.h Tue May 11 16:00:21 2010 +0300 @@ -23,7 +23,7 @@ // INCLUDES #include -#include +#include // CLASS DECLARATIONS diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFieldTypeSelector.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFieldTypeSelector.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFieldTypeSelector.h Tue May 11 16:00:21 2010 +0300 @@ -22,10 +22,10 @@ // INCLUDES #include -#include -#include -#include -#include +#include +#include +#include +#include // FORWARD DECLARATIONS class TVPbkFieldVersitProperty; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFilteredContactView.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFilteredContactView.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkFilteredContactView.h Tue May 11 16:00:21 2010 +0300 @@ -21,9 +21,9 @@ // INCLUDES #include -#include -#include -#include +#include +#include +#include // FORWARD DECLARATIONS namespace VPbkEngUtils { class CVPbkAsyncOperation; } diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/CVPbkPhoneNumberMatchStrategy.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkPhoneNumberMatchStrategy.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkPhoneNumberMatchStrategy.h Tue May 11 16:00:21 2010 +0300 @@ -21,8 +21,8 @@ // INCLUDE FILES #include -#include -#include +#include +#include // FORWARD DECLARATIONS class CVPbkContactManager; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/CVPbkSortOrder.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkSortOrder.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkSortOrder.h Tue May 11 16:00:21 2010 +0300 @@ -21,7 +21,7 @@ // INCLUDES #include -#include +#include // FORWARD DECLARATIONS class TResourceReader; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/CVPbkSpeedDialAttribute.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkSpeedDialAttribute.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkSpeedDialAttribute.h Tue May 11 16:00:21 2010 +0300 @@ -21,9 +21,9 @@ // INCLUDE FILES #include -#include -#include -#include +#include +#include +#include // FORWARD DECLARATIONS diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/CVPbkVoiceTagAttribute.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkVoiceTagAttribute.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/CVPbkVoiceTagAttribute.h Tue May 11 16:00:21 2010 +0300 @@ -21,10 +21,10 @@ // INCLUDE FILES #include -#include -#include -#include -#include +#include +#include +#include +#include // FORWARD DECLARATIONS diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkBaseContactField.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkBaseContactField.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkBaseContactField.h Tue May 11 16:00:21 2010 +0300 @@ -22,7 +22,7 @@ // INCLUDES #include #include -#include +#include // FORWARD DECLARATIONS class MVPbkBaseContact; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldBinaryData.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldBinaryData.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldBinaryData.h Tue May 11 16:00:21 2010 +0300 @@ -20,7 +20,7 @@ #define MVPBKCONTACTFIELDBINARYDATA_H // INCLUDES -#include +#include // CLASS DECLARATIONS diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldData.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldData.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldData.h Tue May 11 16:00:21 2010 +0300 @@ -24,7 +24,7 @@ // INCLUDES #include #include -#include +#include // CONSTANTS diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldDateTimeData.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldDateTimeData.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldDateTimeData.h Tue May 11 16:00:21 2010 +0300 @@ -21,7 +21,7 @@ #define MVPBKCONTACTFIELDDATETIMEDATA_H // INCLUDES -#include +#include // CLASS DECLARATIONS diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldTextData.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldTextData.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldTextData.h Tue May 11 16:00:21 2010 +0300 @@ -21,7 +21,7 @@ // INCLUDES -#include +#include // CLASS DECLARATIONS diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldUriData.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldUriData.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFieldUriData.h Tue May 11 16:00:21 2010 +0300 @@ -21,7 +21,7 @@ // INCLUDES -#include +#include // CLASS DECLARATIONS diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFindFromStoresObserver.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFindFromStoresObserver.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFindFromStoresObserver.h Tue May 11 16:00:21 2010 +0300 @@ -24,7 +24,7 @@ #include // included here, instead of forward declared, so that clients // dont delete an incomplete class. -#include +#include class MVPbkContactStore; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFindObserver.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFindObserver.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactFindObserver.h Tue May 11 16:00:21 2010 +0300 @@ -24,7 +24,7 @@ #include // included here, instead of forward declared, so that clients // don't delete an incomplete class. -#include +#include /** diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactGroup.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactGroup.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactGroup.h Tue May 11 16:00:21 2010 +0300 @@ -22,8 +22,8 @@ // INCLUDES #include -#include -#include +#include +#include // FORWARD DECLARATIONS class MVPbkContactLinkArray; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactLink.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactLink.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactLink.h Tue May 11 16:00:21 2010 +0300 @@ -23,7 +23,7 @@ // INCLUDES #include #include -#include +#include // FORWARD DECLARATIONS class TVPbkContactStoreUriPtr; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactOperation.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactOperation.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactOperation.h Tue May 11 16:00:21 2010 +0300 @@ -20,7 +20,7 @@ #define MVPBKCONTACTOPERATION_H // INCLUDES -#include "mvpbkcontactoperationbase.h" +#include "MVPbkContactOperationBase.h" // CLASS DECLARATIONS diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactOperationFactory2.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactOperationFactory2.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactOperationFactory2.h Tue May 11 16:00:21 2010 +0300 @@ -23,7 +23,7 @@ // INCLUDES #include #include -#include +#include // FORWARD DECLARATIONS class MVPbkContactOperation; class MVPbkContactLink; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactSelector.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactSelector.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactSelector.h Tue May 11 16:00:21 2010 +0300 @@ -58,6 +58,33 @@ }; +// Use this UID to access MVPbkOptimizedSelector extension of the MVPbkContactSelector. +// Used as a parameter to ContactSelectorExtension() method. +const TUid KVPbkOptimizedSelectorExtensionUid = { 2 }; + +/** + * This class is an extension to MVPbkContactSelector. + * See documentation of MVPbkContactSelector from header MVPbkContactSelector.h + * + * @see MVPbkContactSelector + * + */ +class MVPbkOptimizedSelector + { + protected: // Destructor + virtual ~MVPbkOptimizedSelector() { } + + public: + + /** + * Vpbk stop calling MVPbkContactSelector::IsContactIncluded if this function returns false. + * With this function client can optimize selector use in VPbk. + */ + virtual TBool Continue() const = 0; + + }; + + #endif // MVPBKCONTACTSELECTOR_H //End of file diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactStore.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactStore.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactStore.h Tue May 11 16:00:21 2010 +0300 @@ -21,8 +21,8 @@ // INCLUDES #include -#include -#include +#include +#include // FORWARD DECLARATIONS class CVPbkContactViewDefinition; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactStoreListObserver.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactStoreListObserver.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactStoreListObserver.h Tue May 11 16:00:21 2010 +0300 @@ -22,7 +22,7 @@ // INCLUDES -#include +#include // CLASS DECLARATIONS diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactStoreProperties.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactStoreProperties.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactStoreProperties.h Tue May 11 16:00:21 2010 +0300 @@ -22,7 +22,7 @@ // INCLUDES #include -#include +#include // FORWARD DECLARATIONS class MVPbkFieldTypeList; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactView.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactView.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactView.h Tue May 11 16:00:21 2010 +0300 @@ -20,8 +20,8 @@ #define MVPBKCONTACTVIEW_H // INCLUDES -#include -#include +#include +#include // CLASS DECLARATIONS diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactViewBase.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactViewBase.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactViewBase.h Tue May 11 16:00:21 2010 +0300 @@ -21,7 +21,7 @@ // INCLUDES #include -#include +#include #include // FORWARD DECLARATIONS diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactViewBaseChildAccessExtension.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactViewBaseChildAccessExtension.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkContactViewBaseChildAccessExtension.h Tue May 11 16:00:21 2010 +0300 @@ -21,7 +21,7 @@ // INCLUDES #include -#include +#include #include // FORWARD DECLARATIONS diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkFieldType.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkFieldType.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkFieldType.h Tue May 11 16:00:21 2010 +0300 @@ -22,7 +22,7 @@ // INCLUDES #include -#include +#include // FORWARD DECLARATIONS class TVPbkFieldVersitProperty; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkStoreContact.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkStoreContact.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkStoreContact.h Tue May 11 16:00:21 2010 +0300 @@ -22,11 +22,11 @@ // INCLUDES #include -#include -#include +#include +#include // Includes needed for covariant return types -#include +#include // FORWARD DECLARATIONS class MVPbkContactStore; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkStoreContactField.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkStoreContactField.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkStoreContactField.h Tue May 11 16:00:21 2010 +0300 @@ -20,7 +20,7 @@ // INCLUDES #include -#include +#include // CONSTANTS /// A constant that indicates that the store doesn't set limits diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkStoreContactFieldCollection.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkStoreContactFieldCollection.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkStoreContactFieldCollection.h Tue May 11 16:00:21 2010 +0300 @@ -22,10 +22,10 @@ // INCLUDES #include -#include +#include // Includes needed for covariant return types -#include +#include // FORWARD DECLARATIONS class MVPbkStoreContact; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkViewContact.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkViewContact.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkViewContact.h Tue May 11 16:00:21 2010 +0300 @@ -22,7 +22,7 @@ // INCLUDES #include -#include +#include // FORWARD DECLARATIONS diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkViewContactField.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkViewContactField.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkViewContactField.h Tue May 11 16:00:21 2010 +0300 @@ -22,7 +22,7 @@ // INCLUDES #include -#include +#include // CLASS DECLARATIONS diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/MVPbkViewContactFieldCollection.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkViewContactFieldCollection.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/MVPbkViewContactFieldCollection.h Tue May 11 16:00:21 2010 +0300 @@ -22,7 +22,7 @@ // INCLUDES #include -#include +#include // CLASS DECLARATIONS diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/RVPbkContactFieldDefaultPriorities.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/RVPbkContactFieldDefaultPriorities.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/RVPbkContactFieldDefaultPriorities.h Tue May 11 16:00:21 2010 +0300 @@ -21,7 +21,7 @@ // INCLUDES #include -#include // TVPbkDefaultType +#include // TVPbkDefaultType // CONSTANTS namespace VPbkContactFieldDefaultPriorities diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/TVPbkContactStoreUriPtr.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/TVPbkContactStoreUriPtr.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/TVPbkContactStoreUriPtr.h Tue May 11 16:00:21 2010 +0300 @@ -22,7 +22,7 @@ // INCLUDES #include -#include +#include // CLASS DECLARATIONS diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/TVPbkFieldTypeMapping.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/TVPbkFieldTypeMapping.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/TVPbkFieldTypeMapping.h Tue May 11 16:00:21 2010 +0300 @@ -20,8 +20,8 @@ #ifndef TVPBKFIELDTYPEMAPPING_H #define TVPBKFIELDTYPEMAPPING_H -#include -#include +#include +#include class MVPbkFieldType; class MVPbkFieldTypeList; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/TVPbkFieldTypeParameters.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/TVPbkFieldTypeParameters.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/TVPbkFieldTypeParameters.h Tue May 11 16:00:21 2010 +0300 @@ -22,7 +22,7 @@ // INCLUDES #include -#include +#include // FORWARD DECLARATIONS class TResourceReader; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_engine_api/inc/TVPbkFieldVersitProperty.h --- a/contacts_plat/virtual_phonebook_engine_api/inc/TVPbkFieldVersitProperty.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_engine_api/inc/TVPbkFieldVersitProperty.h Tue May 11 16:00:21 2010 +0300 @@ -22,8 +22,8 @@ // INCLUDES #include -#include -#include +#include +#include // FORWARD DECLARATIONS diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_migration_support_api/inc/CVPbkContactIdConverter.h --- a/contacts_plat/virtual_phonebook_migration_support_api/inc/CVPbkContactIdConverter.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_migration_support_api/inc/CVPbkContactIdConverter.h Tue May 11 16:00:21 2010 +0300 @@ -24,7 +24,7 @@ // INCLUDE FILES #include -#include +#include #include // FORWARD DECLARATIONS diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactDuplicatePolicy.h --- a/contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactDuplicatePolicy.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactDuplicatePolicy.h Tue May 11 16:00:21 2010 +0300 @@ -22,8 +22,8 @@ // INCLUDES #include #include -#include -#include +#include +#include // FORWARD DECLARATIONS class CVPbkContactManager; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactFindPolicy.h --- a/contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactFindPolicy.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactFindPolicy.h Tue May 11 16:00:21 2010 +0300 @@ -23,8 +23,8 @@ #include #include -#include -#include +#include +#include // FORWARD DECLARATIONS class MVPbkFieldTypeList; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactNameConstructionPolicy.h --- a/contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactNameConstructionPolicy.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactNameConstructionPolicy.h Tue May 11 16:00:21 2010 +0300 @@ -24,8 +24,8 @@ #include #include -#include -#include +#include +#include // FORWARD DECLARATIONS class MVPbkFieldTypeList; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactViewSortPolicy.h --- a/contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactViewSortPolicy.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_policy_api/inc/phonebook/CVPbkContactViewSortPolicy.h Tue May 11 16:00:21 2010 +0300 @@ -21,8 +21,8 @@ #define CVPBKCONTACTVIEWSORTPOLICY_H #include -#include -#include +#include +#include class CVPbkContactManager; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_store_api/inc/CVPbkBatchOperation.h --- a/contacts_plat/virtual_phonebook_store_api/inc/CVPbkBatchOperation.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_store_api/inc/CVPbkBatchOperation.h Tue May 11 16:00:21 2010 +0300 @@ -23,8 +23,8 @@ #define CVPBKBATCHOPERATION_H // INCLUDE FILES -#include -#include +#include +#include // CLASS DECLARATION diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactAttributePlugin.h --- a/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactAttributePlugin.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactAttributePlugin.h Tue May 11 16:00:21 2010 +0300 @@ -22,7 +22,7 @@ // INCLUDES FILES #include -#include +#include // FORWARD DECLARATIONS class CVPbkContactManager; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactFindFromStoresOperation.h --- a/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactFindFromStoresOperation.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactFindFromStoresOperation.h Tue May 11 16:00:21 2010 +0300 @@ -19,8 +19,8 @@ #ifndef CVPBKCONTACTFINDFROMSTORESOPERATION_H #define CVPBKCONTACTFINDFROMSTORESOPERATION_H -#include -#include +#include +#include /** diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactFindOperation.h --- a/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactFindOperation.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactFindOperation.h Tue May 11 16:00:21 2010 +0300 @@ -22,8 +22,8 @@ #define CVPBKCONTACTFINDOPERATION_H // INCLUDE FILES -#include -#include +#include +#include class CVPbkContactLinkArray; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactStoreDomain.h --- a/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactStoreDomain.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactStoreDomain.h Tue May 11 16:00:21 2010 +0300 @@ -29,9 +29,9 @@ // INCLUDES #include -#include "mvpbkcontactstorelist.h" -#include "mvpbkcontactoperationfactory.h" -#include "mvpbkcontactoperationfactory2.h" +#include "MVPbkContactStoreList.h" +#include "MVPbkContactOperationFactory.h" +#include "MVPbkContactOperationFactory2.h" // FORWARD DECLARATIONS class TVPbkContactStoreUriPtr; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactStoreList.h --- a/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactStoreList.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactStoreList.h Tue May 11 16:00:21 2010 +0300 @@ -20,8 +20,8 @@ #define CVPBKCONTACTSTORELIST_H #include -#include -#include +#include +#include class TVPbkContactStoreUriPtr; class CVPbkContactStoreUriArray; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactStoreProperties.h --- a/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactStoreProperties.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_store_api/inc/CVPbkContactStoreProperties.h Tue May 11 16:00:21 2010 +0300 @@ -22,7 +22,7 @@ // INCLUDES #include -#include +#include // FORWARD DECLARATION diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_store_api/inc/CVPbkMultiContactOperationBase.h --- a/contacts_plat/virtual_phonebook_store_api/inc/CVPbkMultiContactOperationBase.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_store_api/inc/CVPbkMultiContactOperationBase.h Tue May 11 16:00:21 2010 +0300 @@ -22,7 +22,7 @@ // INCLUDES #include -#include +#include // CLASS DECLARATION /** diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_view_definition_api/inc/CVPbkContactViewDefinition.h --- a/contacts_plat/virtual_phonebook_view_definition_api/inc/CVPbkContactViewDefinition.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_view_definition_api/inc/CVPbkContactViewDefinition.h Tue May 11 16:00:21 2010 +0300 @@ -20,7 +20,7 @@ #define CVPBKCONTACTVIEWDEFINITION_H #include -#include +#include class TResourceReader; class CVPbkFieldTypeSelector; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_plat/virtual_phonebook_view_definition_api/inc/VPbkContactViewFilterBuilder.h --- a/contacts_plat/virtual_phonebook_view_definition_api/inc/VPbkContactViewFilterBuilder.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_plat/virtual_phonebook_view_definition_api/inc/VPbkContactViewFilterBuilder.h Tue May 11 16:00:21 2010 +0300 @@ -21,7 +21,7 @@ // INCLUDES #include -#include +#include // FORWARD DECLARATIONS class CVPbkFieldTypeSelector; diff -r 0d28c1c5b6dd -r 2828b4d142c0 contacts_pub/speed_dial_utility_control_api/inc/SpdiaControl.h --- a/contacts_pub/speed_dial_utility_control_api/inc/SpdiaControl.h Tue Apr 27 16:23:35 2010 +0300 +++ b/contacts_pub/speed_dial_utility_control_api/inc/SpdiaControl.h Tue May 11 16:00:21 2010 +0300 @@ -25,7 +25,7 @@ // INCLUDES #include #include -#include +#include #include #include diff -r 0d28c1c5b6dd -r 2828b4d142c0 logsui/AppSrc/CLogsBaseView.cpp --- a/logsui/AppSrc/CLogsBaseView.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/logsui/AppSrc/CLogsBaseView.cpp Tue May 11 16:00:21 2010 +0300 @@ -1743,10 +1743,11 @@ CleanupStack::PopAndDestroy(); //readerConfig contactCheckerPtr->StartL(); - if ( !MenuBar()->ItemSpecificCommandsEnabled() ) - { - iIsCheckedCntLinkInvaild = !contactCheckerPtr->IsCntLinkValidSync( tempPtr ); - } + //if ( !MenuBar()->ItemSpecificCommandsEnabled() ) + // { + // iIsCheckedCntLinkInvaild = !contactCheckerPtr->IsCntLinkValidSync( tempPtr ); + // } + } } @@ -2891,7 +2892,7 @@ TInt CLogsBaseView::HandleNotifyL( TInt aCmdId, TInt aEventId, - CAiwGenericParamList& /* aEventParamList */, + CAiwGenericParamList& aEventParamList, const CAiwGenericParamList& /* aInParamList */ ) { //Only EGenericParamContactLinkArray available in aEventParamList so we use iNumberInPbkProcessing instead @@ -2908,6 +2909,10 @@ // If selecting Options->Exit KAiwEventError will result but the contact may have // still been created so start updater case KAiwEventError: + { + TInt aError = aEventParamList[0].Value().AsTInt32(); + iCoeEnv->HandleError( aError ); + } case KAiwEventCompleted: // Asynch req completed. Right softkey "Done" selected for contact editor { //Enable UI for db-originated changes (however focus needs to be kept unchanged) diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookengines/VirtualPhonebook/VPbkCntModel/inc/CContactStoreInfo.h --- a/phonebookengines/VirtualPhonebook/VPbkCntModel/inc/CContactStoreInfo.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/inc/CContactStoreInfo.h Tue May 11 16:00:21 2010 +0300 @@ -57,6 +57,11 @@ public: // New functions + /** + * Set iGroupsFetched to false. + */ + void ResetGroupsFetched(); + public: // Functions from base classes /** diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookengines/VirtualPhonebook/VPbkCntModel/inc/CCustomFilteredContactView.h --- a/phonebookengines/VirtualPhonebook/VPbkCntModel/inc/CCustomFilteredContactView.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/inc/CCustomFilteredContactView.h Tue May 11 16:00:21 2010 +0300 @@ -97,6 +97,7 @@ private: // From MVPbkContactSelector TBool IsContactIncluded( const MVPbkBaseContact& aContact ); + TAny* ContactSelectorExtension( TUid aExtensionUid); private: // From MContactViewObserver void HandleContactViewEvent( diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookengines/VirtualPhonebook/VPbkCntModel/inc/CFindView.h --- a/phonebookengines/VirtualPhonebook/VPbkCntModel/inc/CFindView.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/inc/CFindView.h Tue May 11 16:00:21 2010 +0300 @@ -88,6 +88,7 @@ TInt& aMatchArrayIndex ) const; void RemoveFromMatchArrayIfFound( const CViewContact& aContact ); TInt FindFromMatchArray( const CViewContact& aContact ) const; + void HeapSortL(RPointerArray aViewContacts); private: // Data /// Own: the find policy @@ -98,6 +99,21 @@ RPointerArray iContactsModelMatchContacts; }; +// CleanupStack helpers for item owning RPointerArrays +template +class CleanupResetAndDestroy + { +public: + inline static void PushL(T& aRef) + { CleanupStack::PushL(TCleanupItem(&ResetAndDestroy,&aRef)); } +private: + inline static void ResetAndDestroy(TAny *aPtr) + { static_cast(aPtr)->ResetAndDestroy(); } + }; + +template +inline void CleanupResetAndDestroyPushL(T& aRef) + { CleanupResetAndDestroy::PushL(aRef); } } // namespace VPbkCntModel #endif // VPBKCNTMODEL_CFINDVIEW_H diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookengines/VirtualPhonebook/VPbkCntModel/inc/VPbkCntModelRemoteViewPreferences.h --- a/phonebookengines/VirtualPhonebook/VPbkCntModel/inc/VPbkCntModelRemoteViewPreferences.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/inc/VPbkCntModelRemoteViewPreferences.h Tue May 11 16:00:21 2010 +0300 @@ -40,7 +40,7 @@ */ const TContactViewPreferences KVPbkDefaultContactViewPrefs = static_cast - ( EContactsOnly | EUnSortedAtEnd | ESingleWhiteSpaceIsEmptyField ); + ( EContactCardsOnly | EUnSortedAtEnd | ESingleWhiteSpaceIsEmptyField ); /** * Virtual Phonebook Cntmodel all groups view remote view name. @@ -52,7 +52,7 @@ */ const TContactViewPreferences KVPbkDefaultGroupsViewPrefs = static_cast - (EGroupsOnly | EUnSortedAtEnd | ESingleWhiteSpaceIsEmptyField); + ( EGroupsOnly | EUnSortedAtEnd | ESingleWhiteSpaceIsEmptyField ); // FUNCTIONS diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookengines/VirtualPhonebook/VPbkCntModel/src/CContactStore.cpp --- a/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CContactStore.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CContactStore.cpp Tue May 11 16:00:21 2010 +0300 @@ -784,14 +784,12 @@ // Release any lock on contact. if (aContactItem) { - // Check that contact store is open - __ASSERT_DEBUG( iContactDb, - ContactStorePanic( EPreCond_ContactDestroyed ) ); - // Cancel async operation if any iAsyncContactOperation->Cancel( aContactItem ); - if ( aCloseContact ) + //iContactDb may be already null if store configuration changed by + //removing the current store from store configuartion + if ( aCloseContact && iContactDb) { // CloseContactL doesn't leave despite its name. iContactDb->CloseContactL(aContactItem->Id()); @@ -917,6 +915,9 @@ iDbNotifier = NULL; delete iContactDb; iContactDb = NULL; + // Set iGroupsFetched to false. + // Make sure iGroupIds is updated again after store is opened again. + iStoreInfo->ResetGroupsFetched(); } } diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookengines/VirtualPhonebook/VPbkCntModel/src/CContactStoreInfo.cpp --- a/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CContactStoreInfo.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CContactStoreInfo.cpp Tue May 11 16:00:21 2010 +0300 @@ -125,6 +125,15 @@ } return iStore.NativeDatabase().GroupCount(); } + +// ----------------------------------------------------------------------------- +// CContactStoreInfo::ResetGroupsFetched +// ----------------------------------------------------------------------------- +// +void CContactStoreInfo::ResetGroupsFetched() + { + iGroupsFetched = EFalse; + } } // namespace VPbkCntModel // End of File diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookengines/VirtualPhonebook/VPbkCntModel/src/CCustomFilteredContactView.cpp --- a/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CCustomFilteredContactView.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CCustomFilteredContactView.cpp Tue May 11 16:00:21 2010 +0300 @@ -172,6 +172,19 @@ } // -------------------------------------------------------------------------- +// CCustomFilteredContactView::ContactSelectorExtension +// -------------------------------------------------------------------------- +// +TAny* CCustomFilteredContactView::ContactSelectorExtension( TUid aExtensionUid ) + { + if( iContactSelector ) + { + return iContactSelector->ContactSelectorExtension( aExtensionUid ); + } + return NULL; + } + +// -------------------------------------------------------------------------- // CCustomFilteredContactView::HandleContactViewEvent // -------------------------------------------------------------------------- // diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookengines/VirtualPhonebook/VPbkCntModel/src/CFindView.cpp --- a/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CFindView.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CFindView.cpp Tue May 11 16:00:21 2010 +0300 @@ -130,6 +130,7 @@ void CFindView::MatchL( RPointerArray& aMatchedContacts ) { + CleanupClosePushL( aMatchedContacts ); iContactsModelMatchContacts.ResetAndDestroy(); VPBK_PROFILE_START(VPbkProfile::ECntModelFind); @@ -163,6 +164,16 @@ } else { + // Sort the matched contacts again with the CCompareView::CompareFieldsL + // compare function. Mark sure the result of binary search is correct in + // function FindFromMatchArray(). + // See defect ou1cimx1#333760 + // Title: "Adding contacts (add recipent) issue while creating new message" + // Root cause: When contact's first or last name contain blank spaces, + // the comparison result may be different between CCompareView::CompareFieldsL + // and CntSortPlugin. e.g. "AB" and "A khan" + HeapSortL( iContactsModelMatchContacts ); + // Do it slowly by looping all the parent view contacts. const TInt contactCount = iParentView.ContactCountL(); for ( TInt i = 0; i < contactCount; ++i ) @@ -176,6 +187,7 @@ } iContactsModelMatchContacts.ResetAndDestroy(); + CleanupStack::Pop(); } // -------------------------------------------------------------------------- @@ -223,6 +235,7 @@ void CFindView::MatchContactL( const CViewContact& aViewContact, RPointerArray& aMatchedContacts ) { + CleanupResetAndDestroyPushL( aMatchedContacts ); // aContact matches if it's one of the always included contacts OR // if it's one of Contacts Model matched contacts AND it also // passes our own match. @@ -256,6 +269,7 @@ aMatchedContacts.AppendL( cnt ); CleanupStack::Pop( cnt ); } + CleanupStack::Pop( &aMatchedContacts ); } // -------------------------------------------------------------------------- @@ -305,5 +319,68 @@ aContact.NativeContact(), TLinearOrder( CCompareView::CompareFieldsL ) ); } + +/** +Heap sort the give view contacts array. + +This function only be called one time when some contacts be marked and we input +the first letter to the FindBox for searching. + +@param aContacts the array of view contacts to be sorted. +@leave leave errors from CCompareView::CompareFieldsL +*/ +void CFindView::HeapSortL(RPointerArray aContacts) + { + // HeapSort (copied from RPointerArrayBase) + TInt ss = aContacts.Count(); + if ( ss>1 ) + { + TInt sh = ss>>1; + FOREVER + { + CCntModelViewContact* si; + if (sh != 0) + { + // make heap + --sh; + si = aContacts[sh]; + } + else + { + // sort heap + --ss; + si = aContacts[ss]; + aContacts[ss] = aContacts[0]; + if (ss == 1) + { + aContacts[0] = si; + break; + } + } + + // sift down + TInt ii = sh; + TInt jj = sh; + FOREVER + { + jj = (jj+1)<<1; + if ((jj >= ss) || (CCompareView::CompareFieldsL(*(aContacts[jj-1]),*(aContacts[jj])) > 0)) + { + --jj; + } + + if ((jj >= ss) || (CCompareView::CompareFieldsL(*(aContacts[jj]),*si) <= 0)) + { + break; + } + + aContacts[ii] = aContacts[jj]; + ii = jj; + } //FOREVER + + aContacts[ii] = si; + } //FOREVER + } //if (ss > 1) + } } // namespace VPbkCntModel // End of File diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookengines/VirtualPhonebook/VPbkCntModel/src/CRefineView.cpp --- a/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CRefineView.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookengines/VirtualPhonebook/VPbkCntModel/src/CRefineView.cpp Tue May 11 16:00:21 2010 +0300 @@ -76,6 +76,7 @@ void CRefineView::MatchL( RPointerArray& aMatchedContacts ) { + CleanupClosePushL( aMatchedContacts ); if ( iIdleUpdate ) { iIdleUpdate->Cancel(); @@ -98,6 +99,7 @@ aMatchedContacts.AppendL( nativeContact ); } } + CleanupStack::Pop(); } // -------------------------------------------------------------------------- diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkFilteredContactView.cpp --- a/phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkFilteredContactView.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookengines/VirtualPhonebook/VPbkEng/src/CVPbkFilteredContactView.cpp Tue May 11 16:00:21 2010 +0300 @@ -434,6 +434,11 @@ iContactMapping.Reset(); + MVPbkOptimizedSelector* optimizedSelector = + static_cast( + iContactSelector.ContactSelectorExtension( + KVPbkOptimizedSelectorExtensionUid ) ); + const TInt count = iBaseView.ContactCountL(); for (TInt i = 0; i < count; ++i) { @@ -441,6 +446,17 @@ { iContactMapping.AppendL(i); } + + if( optimizedSelector && !optimizedSelector->Continue() ) + { + // we doesn't need use selector anymore -> include rest of contacts + for (TInt j = i+1; j < count; ++j ) + { + iContactMapping.AppendL(j); + } + break; + } + } VPBK_DEBUG_PRINT(VPBK_DEBUG_STRING @@ -617,6 +633,13 @@ // TInt CVPbkFilteredContactView::UpdateViewMappingAfterAddingL( TInt aBaseIndex ) { + // protect against ghost contacts. Can happen if last of the contacts is + // deleted or changed into own card immediately after creation. + if ( iBaseView.ContactCountL() <= aBaseIndex ) + { + return KErrNotFound; + } + // first update the mapping for all elements which > aBaseIndex TInt filteredIndex; // find first elemnt which >= aBaseIndex diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookengines/VirtualPhonebook/VPbkSimStore/inc/CFindView.h --- a/phonebookengines/VirtualPhonebook/VPbkSimStore/inc/CFindView.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookengines/VirtualPhonebook/VPbkSimStore/inc/CFindView.h Tue May 11 16:00:21 2010 +0300 @@ -113,6 +113,22 @@ /// Own: match results (SIM indexes) from native view RArray iSIMMatchedContacts; }; + +// CleanupStack helpers for item owning RPointerArrays +template +class CleanupResetAndDestroy + { +public: + inline static void PushL(T& aRef) + { CleanupStack::PushL(TCleanupItem(&ResetAndDestroy,&aRef)); } +private: + inline static void ResetAndDestroy(TAny *aPtr) + { static_cast(aPtr)->ResetAndDestroy(); } + }; + +template +inline void CleanupResetAndDestroyPushL(T& aRef) + { CleanupResetAndDestroy::PushL(aRef); } } // namespace VPbkSimStore diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookengines/VirtualPhonebook/VPbkSimStore/src/CFindView.cpp --- a/phonebookengines/VirtualPhonebook/VPbkSimStore/src/CFindView.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookengines/VirtualPhonebook/VPbkSimStore/src/CFindView.cpp Tue May 11 16:00:21 2010 +0300 @@ -183,6 +183,7 @@ // void CFindView::MatchL( RPointerArray& aMatchedContacts ) { + CleanupResetAndDestroyPushL( aMatchedContacts ); if (iAlwaysIncluded.Count() == 0) { // No always included contacts. The match can be done using @@ -232,6 +233,7 @@ // Free the memory iSIMMatchedContacts.Reset(); + CleanupStack::Pop( &aMatchedContacts ); } // -------------------------------------------------------------------------- @@ -307,6 +309,7 @@ const MVPbkContactLink& /*aContactLink*/, RPointerArray& aMatchedContacts ) { + CleanupResetAndDestroyPushL( aMatchedContacts ); if ( &iParentView == &aView ) { const CViewContact& viewContact = static_cast( @@ -363,6 +366,7 @@ } } } + CleanupStack::Pop( &aMatchedContacts ); } // -------------------------------------------------------------------------- @@ -407,6 +411,7 @@ void CFindView::MatchContactL( const CViewContact& aViewContact, RPointerArray& aMatchedContacts ) { + CleanupResetAndDestroyPushL( aMatchedContacts ); // aContact matches if it's one of the always included contacts OR // (if it's one of Contacts Model matched contacts AND it also // passes our own match). @@ -445,6 +450,7 @@ CleanupStack::Pop( cnt ); } } + CleanupStack::Pop( &aMatchedContacts ); } // -------------------------------------------------------------------------- diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookengines/VirtualPhonebook/VPbkSimStore/src/CRefineView.cpp --- a/phonebookengines/VirtualPhonebook/VPbkSimStore/src/CRefineView.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookengines/VirtualPhonebook/VPbkSimStore/src/CRefineView.cpp Tue May 11 16:00:21 2010 +0300 @@ -123,6 +123,7 @@ // void CRefineView::MatchL( RPointerArray& aMatchedContacts ) { + CleanupClosePushL( aMatchedContacts ); const TInt contactCount = iParentView.ContactCountL(); for ( TInt i = 0; i < contactCount; ++i ) { @@ -140,6 +141,7 @@ aMatchedContacts.AppendL( nativeContact ); } } + CleanupStack::Pop(); } // -------------------------------------------------------------------------- @@ -150,6 +152,7 @@ TInt aIndex, const MVPbkContactLink& /*aContactLink*/, RPointerArray& aMatchedContacts ) { + CleanupClosePushL( aMatchedContacts ); if ( &iParentView == &aView && IsMatchL( iParentView.ContactAtL( aIndex ))) { @@ -198,7 +201,8 @@ { aMatchedContacts.AppendL( nativeContact ); } - } + } + CleanupStack::Pop(); } // -------------------------------------------------------------------------- diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookengines/VirtualPhonebook/VPbkSimStoreImpl/src/CVPbkETelCntConverter.cpp --- a/phonebookengines/VirtualPhonebook/VPbkSimStoreImpl/src/CVPbkETelCntConverter.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookengines/VirtualPhonebook/VPbkSimStoreImpl/src/CVPbkETelCntConverter.cpp Tue May 11 16:00:21 2010 +0300 @@ -274,6 +274,7 @@ RPointerArray& aResultArray, TDes8& aETelContactData, MVPbkSimCntStore& aSimStore ) const { + CleanupResetAndDestroyPushL( aResultArray ); iETelBuffer->Set( &aETelContactData ); User::LeaveIfError( StartRead() ); @@ -294,6 +295,7 @@ { User::Leave( KErrBadDescriptor ); } + CleanupStack::Pop( &aResultArray ); } // ----------------------------------------------------------------------------- diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookengines/VirtualPhonebook/inc/CVPbkETelCntConverter.h --- a/phonebookengines/VirtualPhonebook/inc/CVPbkETelCntConverter.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookengines/VirtualPhonebook/inc/CVPbkETelCntConverter.h Tue May 11 16:00:21 2010 +0300 @@ -147,6 +147,22 @@ TInt iMinContactLength; }; +// CleanupStack helpers for item owning RPointerArrays +template +class CleanupResetAndDestroy + { +public: + inline static void PushL(T& aRef) + { CleanupStack::PushL(TCleanupItem(&ResetAndDestroy,&aRef)); } +private: + inline static void ResetAndDestroy(TAny *aPtr) + { static_cast(aPtr)->ResetAndDestroy(); } + }; + +template +inline void CleanupResetAndDestroyPushL(T& aRef) + { CleanupResetAndDestroy::PushL(aRef); } + #endif // CVPBKETELCNTCONVERTER_H // End of File diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookengines/contactsmodel/cntplsql/src/cpplcommaddrtable.cpp --- a/phonebookengines/contactsmodel/cntplsql/src/cpplcommaddrtable.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookengines/contactsmodel/cntplsql/src/cpplcommaddrtable.cpp Tue May 11 16:00:21 2010 +0300 @@ -817,15 +817,22 @@ User::LeaveIfError(TLex(extValString).Val(storedUpperDigits)); TInt32 stored = storedUpperDigits; - while ( (number != 0) && (stored != 0) && - (number % 10 == 0 || stored % 10 == 0) ) + TBool nonZeroInStoredFound = EFalse; + TBool nonZeroInNumberFound = EFalse; + while ((number != 0) && (stored != 0)) { + nonZeroInNumberFound |= (number % 10 != 0); + nonZeroInStoredFound |= (stored % 10 != 0); + if (nonZeroInStoredFound && nonZeroInNumberFound) + { + break; + } number /= 10; stored /= 10; } - if ( (phoneDigits.iUpperDigits == 0) || (storedUpperDigits == 0) || - (number == stored) ) + if ((phoneDigits.iUpperDigits == 0) || (storedUpperDigits == 0) || + (number == stored)) { phoneMatchArray->AddL(stmnt.ColumnInt(KContactIdIdx)); } diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookengines/contactsmodel/conf/contactsmodel.confml Binary file phonebookengines/contactsmodel/conf/contactsmodel.confml has changed diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookengines/contactsmodel/conf/contactsmodel_10003a73.crml Binary file phonebookengines/contactsmodel/conf/contactsmodel_10003a73.crml has changed diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookengines/contactsmodel/group/COMMON.INF --- a/phonebookengines/contactsmodel/group/COMMON.INF Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookengines/contactsmodel/group/COMMON.INF Tue May 11 16:00:21 2010 +0300 @@ -47,13 +47,13 @@ // Default View Definition store ../inc/cntviewstore.h SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(cntviewstore.h) -// Documentation -../documentation/contacts_connectivityapi.doc /epoc32/engdoc/cntmodel/contacts_connectivityapi.doc -../documentation/contacts_current_itemapi.doc /epoc32/engdoc/cntmodel/contacts_current_itemapi.doc -../documentation/contacts_group_supportapi.doc /epoc32/engdoc/cntmodel/contacts_group_supportapi.doc -../documentation/contacts_multiple_templatesapi.doc /epoc32/engdoc/cntmodel/contacts_multiple_templatesapi.doc -../documentation/contacts_own_card_supportapi.doc /epoc32/engdoc/cntmodel/contacts_own_card_supportapi.doc -../documentation/contacts_sorting_view_supportapi.doc /epoc32/engdoc/cntmodel/contacts_sorting_view_supportapi.doc +// Documentation (not exported until re-contributed to Symbian Foundation) +// ../documentation/contacts_connectivityapi.doc /epoc32/engdoc/cntmodel/contacts_connectivityapi.doc +// ../documentation/contacts_current_itemapi.doc /epoc32/engdoc/cntmodel/contacts_current_itemapi.doc +// ../documentation/contacts_group_supportapi.doc /epoc32/engdoc/cntmodel/contacts_group_supportapi.doc +// ../documentation/contacts_multiple_templatesapi.doc /epoc32/engdoc/cntmodel/contacts_multiple_templatesapi.doc +// ../documentation/contacts_own_card_supportapi.doc /epoc32/engdoc/cntmodel/contacts_own_card_supportapi.doc +// ../documentation/contacts_sorting_view_supportapi.doc /epoc32/engdoc/cntmodel/contacts_sorting_view_supportapi.doc PRJ_MMPFILES diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookengines/contactsmodel/tsrc/T_CntMatch.cpp --- a/phonebookengines/contactsmodel/tsrc/T_CntMatch.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookengines/contactsmodel/tsrc/T_CntMatch.cpp Tue May 11 16:00:21 2010 +0300 @@ -801,9 +801,20 @@ CreateContactL(KCntName,KCntSurname,_L("584443049607"),KNullDesC); TESTVALUE(CheckPhoneMatchL(_L("4443049607"), KBestMatchingPhoneNumbers),1); + ResetDatabaseL(); CreateContactL(KCntName,KCntSurname,_L("401234567"),KNullDesC); TESTVALUE(CheckPhoneMatchL(_L("2041234567"), KBestMatchingPhoneNumbers),0); + ResetDatabaseL(); + CreateContactL(KCntName,KCntSurname,_L("0401234567"),KNullDesC); + CreateContactL(KCntName,KCntSurname,_L("0501234567"),KNullDesC); + TESTVALUE(CheckPhoneMatchL(_L("0401234567"), KBestMatchingPhoneNumbers),1); + + ResetDatabaseL(); + CreateContactL(KCntName,KCntSurname,_L("020421234567"),KNullDesC); + CreateContactL(KCntName,KCntSurname,_L("005021234567"),KNullDesC); + TESTVALUE(CheckPhoneMatchL(_L("020421234567"), KBestMatchingPhoneNumbers),1); + } /** diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook/Engine/src/CContactDbConnection.cpp --- a/phonebookui/Phonebook/Engine/src/CContactDbConnection.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook/Engine/src/CContactDbConnection.cpp Tue May 11 16:00:21 2010 +0300 @@ -56,7 +56,7 @@ /// Default contact view preferences const TContactViewPreferences KPbkDefaultContactViewPrefs = static_cast - (EContactsOnly | EUnSortedAtEnd | ESingleWhiteSpaceIsEmptyField); + ( EContactCardsOnly | EUnSortedAtEnd | ESingleWhiteSpaceIsEmptyField ); #ifdef _DEBUG enum TPanicCode diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook/View/src/TPbkAddItemManager.cpp --- a/phonebookui/Phonebook/View/src/TPbkAddItemManager.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook/View/src/TPbkAddItemManager.cpp Tue May 11 16:00:21 2010 +0300 @@ -90,6 +90,7 @@ const TPbkAddItemWrapper& aItemWrapper, RArray& aAddedItemsControlIds) { + CleanupClosePushL( aAddedItemsControlIds ); aAddedItemsControlIds.Reset(); for (TInt i = 0; i < aItemWrapper.FieldInfoCount(); ++i) @@ -102,6 +103,7 @@ User::LeaveIfError(aAddedItemsControlIds.Append(field.ControlId())); } } + CleanupStack::Pop(); } /** @@ -113,6 +115,7 @@ const CPbkFieldsInfo& aFieldsInfo, RArray& aAddItems) const { + CleanupClosePushL( aAddItems ); aAddItems.Reset(); const TInt fieldInfoCount = aFieldsInfo.Count(); @@ -161,6 +164,7 @@ } } CleanupStack::PopAndDestroy(); // addedGroups + CleanupStack::Pop(); } // End of File diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/Application/inc/CPbk2AppUi.h --- a/phonebookui/Phonebook2/Application/inc/CPbk2AppUi.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/Application/inc/CPbk2AppUi.h Tue May 11 16:00:21 2010 +0300 @@ -92,11 +92,6 @@ void ExitL(); /** - * Forces exit. - */ - void Exit(); - - /** * Activates Phonebook view. * * @param aViewId Id of the view to activate. diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/Application/src/CPbk2AppUi.cpp --- a/phonebookui/Phonebook2/Application/src/CPbk2AppUi.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/Application/src/CPbk2AppUi.cpp Tue May 11 16:00:21 2010 +0300 @@ -282,15 +282,6 @@ } // -------------------------------------------------------------------------- -// CPbk2AppUi::Exit -// -------------------------------------------------------------------------- -// -void CPbk2AppUi::Exit() - { - CPbk2AppUiBase::Exit(); - } - -// -------------------------------------------------------------------------- // CPbk2AppUi::ActivatePhonebookViewL // -------------------------------------------------------------------------- // diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/BWINS/Pbk2UiControlsU.DEF --- a/phonebookui/Phonebook2/BWINS/Pbk2UiControlsU.DEF Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/BWINS/Pbk2UiControlsU.DEF Tue May 11 16:00:21 2010 +0300 @@ -120,4 +120,5 @@ ?MapVPbkFieldTypeToAddressGroupId@Pbk2AddressTools@@SA?AW4TPbk2FieldGroupId@@PBVMVPbkFieldType@@@Z @ 119 NONAME ; enum TPbk2FieldGroupId Pbk2AddressTools::MapVPbkFieldTypeToAddressGroupId(class MVPbkFieldType const *) ?IsAddressPreviewEmptyL@Pbk2AddressTools@@SAHAAVMVPbkStoreContact@@W4TPbk2FieldGroupId@@@Z @ 120 NONAME ; int Pbk2AddressTools::IsAddressPreviewEmptyL(class MVPbkStoreContact &, enum TPbk2FieldGroupId) ?MassUpdateSkipProgressNote@CPbk2NamesListControl@@QAEXH@Z @ 121 NONAME ; void CPbk2NamesListControl::MassUpdateSkipProgressNote(int) + ?SetOpeningCca@CPbk2NamesListControl@@QAEXH@Z @ 122 NONAME ; void CPbk2NamesListControl::SetOpeningCca(int) diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/CommandsExtension/src/CPbk2MergeConflict.cpp --- a/phonebookui/Phonebook2/CommandsExtension/src/CPbk2MergeConflict.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/CommandsExtension/src/CPbk2MergeConflict.cpp Tue May 11 16:00:21 2010 +0300 @@ -235,11 +235,13 @@ RPointerArray& aAddressFields ) { __ASSERT_ALWAYS( iFieldFirst && iFieldSecond, Panic( EPbk2NotChosen ) ); + CleanupClosePushL( aAddressFields ); if ( iChosenField ) { aAddressFields.AppendL( iChosenField ); } + CleanupStack::Pop(); } // -------------------------------------------------------------------------- @@ -385,6 +387,7 @@ { __ASSERT_ALWAYS( iContactChosenAddress, Panic( EPbk2NotChosen ) ); + CleanupClosePushL( aAddressFields ); CPbk2PresentationContactFieldCollection& fields = iContactChosenAddress->PresentationFields(); for( TInt idx = 0; idx < fields.FieldCount(); idx++ ) @@ -396,5 +399,6 @@ aAddressFields.AppendL( &field ); } } + CleanupStack::Pop(); } diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/CommandsExtension/src/CPbk2MergeContactsCmd.cpp --- a/phonebookui/Phonebook2/CommandsExtension/src/CPbk2MergeContactsCmd.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/CommandsExtension/src/CPbk2MergeContactsCmd.cpp Tue May 11 16:00:21 2010 +0300 @@ -1210,21 +1210,24 @@ // void CPbk2MergeContactsCmd::SetTitlePaneL( TBool aCustom ) { - CEikStatusPane* statusPane = iAvkonAppUi->StatusPane(); - if ( statusPane && statusPane->PaneCapabilities( TUid::Uid( EEikStatusPaneUidTitle ) ).IsPresent() ) + if ( iAvkonAppUi ) { - CAknTitlePane* titlePane = static_cast - ( statusPane->ControlL ( TUid::Uid( EEikStatusPaneUidTitle ) ) ); - - if ( aCustom ) + CEikStatusPane* statusPane = iAvkonAppUi->StatusPane(); + if ( statusPane && statusPane->PaneCapabilities( TUid::Uid( EEikStatusPaneUidTitle ) ).IsPresent() ) { - HBufC* title = StringLoader::LoadLC( R_QTN_PHOB_TITLE_MERGE_CONTACTS ); - titlePane->SetTextL( *title ); - CleanupStack::PopAndDestroy( title ); - } - else - { - titlePane->SetTextToDefaultL(); + CAknTitlePane* titlePane = static_cast + ( statusPane->ControlL ( TUid::Uid( EEikStatusPaneUidTitle ) ) ); + + if ( aCustom ) + { + HBufC* title = StringLoader::LoadLC( R_QTN_PHOB_TITLE_MERGE_CONTACTS ); + titlePane->SetTextL( *title ); + CleanupStack::PopAndDestroy( title ); + } + else + { + titlePane->SetTextToDefaultL(); + } } } } diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/CommonUI/inc/CPbk2NonTopContactSelector.h --- a/phonebookui/Phonebook2/CommonUI/inc/CPbk2NonTopContactSelector.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/CommonUI/inc/CPbk2NonTopContactSelector.h Tue May 11 16:00:21 2010 +0300 @@ -30,7 +30,8 @@ /** */ class CPbk2NonTopContactSelector : public CBase, - public MVPbkContactSelector + public MVPbkContactSelector, + public MVPbkOptimizedSelector { public: @@ -43,12 +44,17 @@ TBool IsContactIncluded( const MVPbkBaseContact& aContact ); - + + TAny* ContactSelectorExtension( + TUid aExtensionUid); + + private: // From MVPbkOptimizedSelector + TBool Continue() const; + private: CPbk2NonTopContactSelector(); - void ConstructL(); private: - TBool iMyCardSupported; + TBool iContinue; }; diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/CommonUI/src/CPbk2NonTopContactSelector.cpp --- a/phonebookui/Phonebook2/CommonUI/src/CPbk2NonTopContactSelector.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/CommonUI/src/CPbk2NonTopContactSelector.cpp Tue May 11 16:00:21 2010 +0300 @@ -15,21 +15,20 @@ * */ - #include "CPbk2NonTopContactSelector.h" #include -#include // Virtual Phonebook #include CPbk2NonTopContactSelector* CPbk2NonTopContactSelector::NewL() { - CPbk2NonTopContactSelector* self = new (ELeave) CPbk2NonTopContactSelector(); - CleanupStack::PushL( self ); - self->ConstructL(); - CleanupStack::Pop( self ); - return self; + return new (ELeave) CPbk2NonTopContactSelector(); + } + +CPbk2NonTopContactSelector::CPbk2NonTopContactSelector() +: iContinue(ETrue) + { } CPbk2NonTopContactSelector::~CPbk2NonTopContactSelector() @@ -39,41 +38,30 @@ TBool CPbk2NonTopContactSelector::IsContactIncluded( const MVPbkBaseContact& aContact ) { - TBool isContactIncluded( !CVPbkTopContactManager::IsTopContact( aContact ) ); - - if( iMyCardSupported ) - { - // this is temporary solution to hide own contact from phonebook contacts list, - // TODO remove this code when we can hide own contact with contact model - - MVPbkBaseContact& contact = const_cast( aContact ); - TAny* extension = contact.BaseContactExtension( - KVPbkBaseContactExtension2Uid ); + TBool isContactIncluded( + !CVPbkTopContactManager::IsTopContact( aContact ) ); + + // Continue until we found first contact that is not top contact + // we can stop selector when we found first contact that is not top contact + // because top contacts are sorted to top of the contact list. + iContinue = !isContactIncluded; + return isContactIncluded; - if( isContactIncluded && extension ) - { - MVPbkBaseContact2* baseContactExtension = - static_cast( extension ); - TInt error( KErrNone ); - isContactIncluded = - ( !baseContactExtension->IsOwnContact( error ) ); - } + } + +TAny* CPbk2NonTopContactSelector::ContactSelectorExtension( TUid aExtensionUid ) + { + if( aExtensionUid == KVPbkOptimizedSelectorExtensionUid ) + { + return static_cast( this ); } - - return isContactIncluded; + return NULL; + } + +TBool CPbk2NonTopContactSelector::Continue() const + { + return iContinue; } -CPbk2NonTopContactSelector::CPbk2NonTopContactSelector() - { - } - -void CPbk2NonTopContactSelector::ConstructL() - { - FeatureManager::InitializeLibL(); - iMyCardSupported = - FeatureManager::FeatureSupported( KFeatureIdffContactsMycard ); - FeatureManager::UnInitializeLib(); - } - // End of File diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/EABI/Pbk2UiControlsU.DEF --- a/phonebookui/Phonebook2/EABI/Pbk2UiControlsU.DEF Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/EABI/Pbk2UiControlsU.DEF Tue May 11 16:00:21 2010 +0300 @@ -202,4 +202,5 @@ _ZN16Pbk2AddressTools22IsAddressPreviewEmptyLER17MVPbkStoreContact17TPbk2FieldGroupId @ 201 NONAME _ZN16Pbk2AddressTools32MapVPbkFieldTypeToAddressGroupIdEPK14MVPbkFieldType @ 202 NONAME _ZN21CPbk2NamesListControl26MassUpdateSkipProgressNoteEi @ 203 NONAME + _ZN21CPbk2NamesListControl13SetOpeningCcaEi @ 204 NONAME diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/GroupExtension/inc/CPguAddMembersCmd.h --- a/phonebookui/Phonebook2/GroupExtension/inc/CPguAddMembersCmd.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/GroupExtension/inc/CPguAddMembersCmd.h Tue May 11 16:00:21 2010 +0300 @@ -211,6 +211,8 @@ MVPbkContactLinkArray* iContactsInGroup; /// Own: State of the command TState iState; + /// Own: count of contacts already added to group + TInt iAddedContactsCount; }; #endif // CPGUADDMEMBERSCMD_H diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/GroupExtension/src/CPguAddMembersCmd.cpp --- a/phonebookui/Phonebook2/GroupExtension/src/CPguAddMembersCmd.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/GroupExtension/src/CPguAddMembersCmd.cpp Tue May 11 16:00:21 2010 +0300 @@ -88,7 +88,8 @@ MPbk2ContactUiControl& aUiControl ) : CActive( CActive::EPriorityStandard ), iUiControl( &aUiControl ), - iGroupLink( aContactGroup ) + iGroupLink( aContactGroup ), + iAddedContactsCount( 0 ) { PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING ("CPguAddMembersCmd::CPguAddMembersCmd(0x%x)"), this); @@ -250,7 +251,15 @@ // TInt CPguAddMembersCmd::RunError( TInt aError ) { - if ( aError != KErrNone ) + if ( iState == EAddingContactsToGroup && aError == KErrInUse && + iEntriesToAdd && iEntriesToAdd->Count() > KOneContact ) + { + // Incase there was more than just one contact being added, ignore + // the KErrInUse error and continue with the remaining contacts + iState = EAddingContactsToGroup; + IssueRequest(); + } + else if ( aError != KErrNone ) { FinishCommand( aError ); } @@ -743,33 +752,27 @@ // -------------------------------------------------------------------------- // void CPguAddMembersCmd::AddContactsToGroupL() - { - TInt count = 0; - if ( iEntriesToAdd ) - { - count = iEntriesToAdd->Count(); - } - - for ( TInt i = 0; i < count; ++i ) - { - TRAPD( err, iContactGroup->AddContactL( iEntriesToAdd->At( i ) ) ); + { + if (iEntriesToAdd && + iAddedContactsCount < iEntriesToAdd->Count() ) + { + const MVPbkContactLink& contactToAdd = iEntriesToAdd->At( iAddedContactsCount ); + iAddedContactsCount++; + + // If leaves, RunError called + iContactGroup->AddContactL( contactToAdd ); + if ( iDecorator ) { iDecorator->ProcessAdvance( 1 ); - } - if ( err == KErrInUse ) - { - if ( iEntriesToAdd->Count() == 1 ) - { - User::Leave( err ); - } - } - else - { - User::LeaveIfError( err ); - } + } + iState = EAddingContactsToGroup; } - iState = ECommitingTransaction; + else + { + iState = ECommitingTransaction; + } + IssueRequest(); } diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/GroupExtension/src/CPguRenameGroupCmd.cpp --- a/phonebookui/Phonebook2/GroupExtension/src/CPguRenameGroupCmd.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/GroupExtension/src/CPguRenameGroupCmd.cpp Tue May 11 16:00:21 2010 +0300 @@ -213,9 +213,10 @@ // -------------------------------------------------------------------------- // TInt CPguRenameGroupCmd::RunError( TInt aError ) - { - CCoeEnv::Static()->HandleError( aError ); - return KErrNone; + { + IssueRequest(EFinishCommand); + + return aError; } // -------------------------------------------------------------------------- diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/MapExtension/src/cpmapcmd.cpp --- a/phonebookui/Phonebook2/MapExtension/src/cpmapcmd.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/MapExtension/src/cpmapcmd.cpp Tue May 11 16:00:21 2010 +0300 @@ -568,7 +568,7 @@ // void CPmapCmd::EditorShowOnMapsL( TVPbkFieldTypeParameter aAddressType ) { - CMnMapView* mapview = CMnMapView::NewL( *iMapViewProvider ); + CMnMapView* mapview = CMnMapView::NewChainedL( *iMapViewProvider ); CleanupStack::PushL( mapview ); RPointerArray landmarks; diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/NamesListExtension/inc/CPbk2NameslistUiControlExtension.h --- a/phonebookui/Phonebook2/NamesListExtension/inc/CPbk2NameslistUiControlExtension.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/NamesListExtension/inc/CPbk2NameslistUiControlExtension.h Tue May 11 16:00:21 2010 +0300 @@ -97,7 +97,7 @@ private: // From MPbk2ContactUiControlDoubleListboxExtension void FormatDataL( - const MVPbkViewContact& aViewContact, + const MVPbkContactLink& aContactLink, MPbk2DoubleListboxDataElement& aDataElement ); void SetCommandItemUpdater( MPbk2CommandItemUpdater* aCommandUpdater ); diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/NamesListExtension/src/CPbk2NameslistUiControlExtension.cpp --- a/phonebookui/Phonebook2/NamesListExtension/src/CPbk2NameslistUiControlExtension.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/NamesListExtension/src/CPbk2NameslistUiControlExtension.cpp Tue May 11 16:00:21 2010 +0300 @@ -271,49 +271,46 @@ // ----------------------------------------------------------------------------- // void CPbk2NameslistUiControlExtension::FormatDataL( - const MVPbkViewContact& aViewContact, + const MVPbkContactLink& aContactLink, MPbk2DoubleListboxDataElement& aDataElement ) { - MVPbkContactLink* link = aViewContact.CreateLinkLC(); - if( link ) - { - HBufC* txt = NULL; - TPbk2IconId iconId; - CSpbContentProvider::TSpbContentType type = CSpbContentProvider::ETypeNone; - iContentProvider.GetContentL( *link, txt, iconId, type ); + HBufC* txt = NULL; + TPbk2IconId iconId; + CSpbContentProvider::TSpbContentType type = CSpbContentProvider::ETypeNone; + + iContentProvider.GetContentL( + *(const_cast(&aContactLink)), txt, iconId, type ); - // select proper element type based on content type - MPbk2DoubleListboxDataElement::TTextDataType elemType = - MPbk2DoubleListboxDataElement::ETypeGenericText; - if( type == CSpbContentProvider::ETypePhoneNumber ) - { - elemType = MPbk2DoubleListboxDataElement::ETypePhoneNumber; - } - else if( type == CSpbContentProvider::ETypePhoneNumberMultiple && txt ) + // select proper element type based on content type + MPbk2DoubleListboxDataElement::TTextDataType elemType = + MPbk2DoubleListboxDataElement::ETypeGenericText; + if( type == CSpbContentProvider::ETypePhoneNumber ) + { + elemType = MPbk2DoubleListboxDataElement::ETypePhoneNumber; + } + else if( type == CSpbContentProvider::ETypePhoneNumberMultiple && txt ) + { + // if we get multiple phone numbers from content provider, then + // the string only contains the count (as text). We need to format + // that into proper UI text. + TInt num = 0; + TLex16 lex( *txt ); + TInt err = lex.Val( num ); + if( !err ) { - // if we get multiple phone numbers from content provider, then - // the string only contains the count (as text). We need to format - // that into proper UI text. - TInt num = 0; - TLex16 lex( *txt ); - TInt err = lex.Val( num ); - if( !err ) - { - delete txt; - txt = StringLoader::LoadL( R_QTN_PHOB_N_NUMBERS, num ); - } - else - { - // in case of convert error - txt->Des().Zero(); - } + delete txt; + txt = StringLoader::LoadL( R_QTN_PHOB_N_NUMBERS, num ); } - - aDataElement.SetText( - MPbk2DoubleListboxDataElement::EStatusText, txt, elemType ); + else + { + // in case of convert error + txt->Des().Zero(); + } + } + + aDataElement.SetText( + MPbk2DoubleListboxDataElement::EStatusText, txt, elemType ); - CleanupStack::PopAndDestroy(); // link - } } // ----------------------------------------------------------------------------- diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/NamesListExtension/src/NamesListExView.cpp --- a/phonebookui/Phonebook2/NamesListExtension/src/NamesListExView.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/NamesListExtension/src/NamesListExView.cpp Tue May 11 16:00:21 2010 +0300 @@ -413,6 +413,11 @@ { iCurrentCommandId = aCommandId; } + + if ( EPbk2CmdOpenCca == aCommandId ) + { + iControl->SetOpeningCca( ETrue ); + } // No command handling in this class, forward to Commands if (!iCommandHandler->HandleCommandL( aCommandId, *iControlProxy, &iView )) @@ -703,7 +708,14 @@ { PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING ("CPbk2NamesListExView(%x)::DoDeactivate()"), this); - + + // CCA Connection should be closed when Name List View deactivated + if( iCCAConnection ) + { + iCCAConnection->Close(); + iCCAConnection = NULL; + } + if ( iCommandHandler ) { iCommandHandler->RemoveMenuCommandObserver( *this ); @@ -1320,6 +1332,11 @@ // after a command is finished. iCtrlVisibleStateBeforeLosingForground = ETrue; + if( EPbk2CmdOpenCca == iCurrentCommandId ) + { + iControl->SetOpeningCca( EFalse ); + } + iControl->AllowPointerEvents( ETrue ); iControl->ShowThumbnail(); diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/NamesListExtension/src/NamesListUiExtensionPlugin.cpp --- a/phonebookui/Phonebook2/NamesListExtension/src/NamesListUiExtensionPlugin.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/NamesListExtension/src/NamesListUiExtensionPlugin.cpp Tue May 11 16:00:21 2010 +0300 @@ -734,14 +734,9 @@ // -------------------------------------------------------------------------- // void CNamesListUIExtensionPlugin::StoreUnavailable - ( MVPbkContactStore& aContactStore, TInt /*aReason*/ ) + ( MVPbkContactStore& /*aContactStore*/, TInt /*aReason*/ ) { - if ( aContactStore.StoreProperties().Name().UriDes().Compare - ( VPbkContactStoreUris::DefaultCntDbUri() ) && iLocalStore ) - { - iLocalStore->Close( *this ); - iLocalStore = NULL; - } + } // -------------------------------------------------------------------------- @@ -767,15 +762,7 @@ { iLocalStoreContactsCount--; break; - } - - case TVPbkContactStoreEvent::EStoreBackupRestoreCompleted: - case TVPbkContactStoreEvent::EUnknownChanges: - { - iLocalStoreContactsCount = iLocalStore->StoreInfo().NumberOfContactsL(); - break; - } - + } default: break; } diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/Presentation/inc/CPbk2ContactNameFormatter.h --- a/phonebookui/Phonebook2/Presentation/inc/CPbk2ContactNameFormatter.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/Presentation/inc/CPbk2ContactNameFormatter.h Tue May 11 16:00:21 2010 +0300 @@ -92,6 +92,12 @@ HBufC* GetContactTitleWithCompanyNameL( const MVPbkBaseContactFieldCollection& aContactFields, TUint32 aFormattingFlags ); + + public: // From MPbk2ContactNameFormatter3 + CVPbkBaseContactFieldTypeListIterator* TitleWithCompanyNameFieldsLC( + CVPbkFieldTypeRefsList& aFieldTypeList, + const MVPbkBaseContactFieldCollection& aContactFields ); + private: void GetContactTitleWithCompanyName( @@ -103,7 +109,11 @@ const TUint32 aFormattingFlags ); TBool IsCompanyNameField(); - + + void TitleFieldsL( CVPbkFieldTypeRefsList& aFieldTypeList, + const MVPbkBaseContactFieldCollection& aContactFields, + const TInt aStartingPosition, const TInt aEndingPosition ); + protected: // Implementation CPbk2ContactNameFormatter( const MVPbkFieldTypeList& aMasterFieldTypeList, diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/Presentation/inc/CPbk2ContactNameFormatterBase.h --- a/phonebookui/Phonebook2/Presentation/inc/CPbk2ContactNameFormatterBase.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/Presentation/inc/CPbk2ContactNameFormatterBase.h Tue May 11 16:00:21 2010 +0300 @@ -24,6 +24,7 @@ #include #include #include +#include #include "TPbk2SortOrderFieldMapper.h" @@ -44,7 +45,8 @@ NONSHARABLE_CLASS( CPbk2ContactNameFormatterBase ) : public CBase, public MPbk2ContactNameFormatter, - public MPbk2ContactNameFormatter2 + public MPbk2ContactNameFormatter2, + public MPbk2ContactNameFormatter3 { public: // Constructors and destructor @@ -91,7 +93,10 @@ const MVPbkBaseContactFieldCollection& aContactFields, TUint32 aFormattingFlags ) = 0; - + public: // from MPbk2ContactNameFormatter3 + virtual CVPbkBaseContactFieldTypeListIterator* TitleWithCompanyNameFieldsLC( + CVPbkFieldTypeRefsList& aFieldTypeList, + const MVPbkBaseContactFieldCollection& aContactFields ) = 0; protected: // New functions diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/Presentation/inc/CPbk2JapaneseContactNameFormatter.h --- a/phonebookui/Phonebook2/Presentation/inc/CPbk2JapaneseContactNameFormatter.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/Presentation/inc/CPbk2JapaneseContactNameFormatter.h Tue May 11 16:00:21 2010 +0300 @@ -87,7 +87,16 @@ { return NULL; } - + + public: // From MPbk2ContactNameFormatter3 + + CVPbkBaseContactFieldTypeListIterator* TitleWithCompanyNameFieldsLC( + CVPbkFieldTypeRefsList& /*aFieldTypeList*/, + const MVPbkBaseContactFieldCollection& /*aContactFields */) + { + return NULL; + } + private: // Implementation CPbk2JapaneseContactNameFormatter( const MVPbkFieldTypeList& aMasterFieldTypeList, diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/Presentation/src/CPbk2ContactNameFormatter.cpp --- a/phonebookui/Phonebook2/Presentation/src/CPbk2ContactNameFormatter.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/Presentation/src/CPbk2ContactNameFormatter.cpp Tue May 11 16:00:21 2010 +0300 @@ -150,6 +150,10 @@ (aFormattingFlags, ENameCompanyPart+1, count-1); // zero-based } + if ( !result || aFormattingFlags & MPbk2ContactNameFormatter::EDisableCompanyNameSeparator ) + { + return result; + } return result+1; // for seperator "," } // ----------------------------------------------------------------------------- @@ -190,6 +194,10 @@ { return static_cast( this ); } + if ( aExtensionUid == MPbk2ContactNameFormatterExtension3Uid ) + { + return static_cast( this ); + } return NULL; } // ----------------------------------------------------------------------------- @@ -217,7 +225,10 @@ //third field is expected to be company name if ( IsCompanyNameField() ) { - aTitle.Append(KSeparator); + if ( !( aFormattingFlags & MPbk2ContactNameFormatter::EDisableCompanyNameSeparator) ) + { + aTitle.Append(KSeparator); + } DoGetContactTitle(aTitle, EPreserveLeadingSpaces, ENameCompanyPart, ENameCompanyPart); } @@ -250,6 +261,23 @@ } // ----------------------------------------------------------------------------- +// CPbk2ContactNameFormatter::TitleWithCompanyNameFieldsLC +// ----------------------------------------------------------------------------- +// +CVPbkBaseContactFieldTypeListIterator* +CPbk2ContactNameFormatter::TitleWithCompanyNameFieldsLC( + CVPbkFieldTypeRefsList& aFieldTypeList, + const MVPbkBaseContactFieldCollection& aContactFields ) + { + + TitleFieldsL( aFieldTypeList, aContactFields, ENameFirstPart, ENameCompanyPart); + + return CVPbkBaseContactFieldTypeListIterator::NewLC( + aFieldTypeList, + aContactFields); + + } +// ----------------------------------------------------------------------------- // CPbk2ContactNameFormatter::ActualTitleFieldsLC // See function CPbk2ContactNameFormatter::GetContactTitle. // ----------------------------------------------------------------------------- @@ -259,29 +287,39 @@ CVPbkFieldTypeRefsList& aFieldTypeList, const MVPbkBaseContactFieldCollection& aContactFields) { + + TitleFieldsL( aFieldTypeList, aContactFields, ENameFirstPart, ENameSecondPart); + + return CVPbkBaseContactFieldTypeListIterator::NewLC( + aFieldTypeList, + aContactFields); + } +// ----------------------------------------------------------------------------- +// CPbk2ContactNameFormatter::TitleFieldsL +// ----------------------------------------------------------------------------- +// +void CPbk2ContactNameFormatter::TitleFieldsL( CVPbkFieldTypeRefsList& aFieldTypeList, + const MVPbkBaseContactFieldCollection& aContactFields, + const TInt aStartingPosition, const TInt aEndingPosition ) + { aFieldTypeList.Reset(); SetFieldMapper( aContactFields ); DoAppendNonEmptyTitleFieldTypesL( aFieldTypeList, - ENameFirstPart, - ENameSecondPart); + aStartingPosition, + aEndingPosition); if( aFieldTypeList.FieldTypeCount() == 0 ) { const TInt count = iFieldMapper.FieldCount(); DoAppendNonEmptyTitleFieldTypesL( aFieldTypeList, - ENameSecondPart+1, + aEndingPosition+1, count-1); } - - return CVPbkBaseContactFieldTypeListIterator::NewLC( - aFieldTypeList, - aContactFields); } - // ----------------------------------------------------------------------------- // CPbk2ContactNameFormatter::MaxTitleLength // ----------------------------------------------------------------------------- diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/Presentation/src/CPbk2SortOrderManagerImpl.cpp --- a/phonebookui/Phonebook2/Presentation/src/CPbk2SortOrderManagerImpl.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/Presentation/src/CPbk2SortOrderManagerImpl.cpp Tue May 11 16:00:21 2010 +0300 @@ -171,6 +171,8 @@ // inline void CPbk2SortOrderManagerImpl::ConstructL( RFs* aFs ) { + FeatureManager::InitializeLibL(); + iFeatureManagerInitilized = ETrue; iSortOrderSettings = CRepository::NewL(TUid::Uid(KCRUidPhonebook)); // Open resource file for reading language specific default values @@ -230,8 +232,6 @@ ( *iSortOrderSettings, *this ); iSortOrderMonitor->ActivateL(); iSeparatorMonitor->ActivateL(); - FeatureManager::InitializeLibL(); - iFeatureManagerInitilized = ETrue; } // -------------------------------------------------------------------------- diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/ServerApplication/inc/CPbk2ServerAppStoreManager.h --- a/phonebookui/Phonebook2/ServerApplication/inc/CPbk2ServerAppStoreManager.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/ServerApplication/inc/CPbk2ServerAppStoreManager.h Tue May 11 16:00:21 2010 +0300 @@ -39,7 +39,6 @@ class CPbk2StoreConfiguration; class CVPbkSortOrderAcquirer; class MVPbkContactLinkArray; -class CPbk2MyCardFilter; // CLASS DECLARATION @@ -192,8 +191,6 @@ CVPbkSortOrderAcquirer* iSortOrderAcquirer; /// Ref: list of opened contact stores RPointerArray iOpenedStores; - /// Own: - CPbk2MyCardFilter* iMyCardFilter; }; #endif // CPBK2SERVERAPPSTOREMANAGER_H diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/ServerApplication/src/CPbk2MultiAssignDataPhase.cpp --- a/phonebookui/Phonebook2/ServerApplication/src/CPbk2MultiAssignDataPhase.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/ServerApplication/src/CPbk2MultiAssignDataPhase.cpp Tue May 11 16:00:21 2010 +0300 @@ -293,12 +293,6 @@ void CPbk2MultiAssignDataPhase::ContactOperationFailed ( TContactOp /*aOpCode*/, TInt aErrorCode, TBool /*aErrorNotified*/ ) { - // Locking the contact failed - if ( KErrInUse == aErrorCode ) - { - CCoeEnv::Static()->HandleError( aErrorCode ); - } - // If the contact operation failed, the iStoreContact is expected to be deleted, // otherwise it will lead to memory leak. if ( iStoreContact ) diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/ServerApplication/src/CPbk2ServerAppStoreManager.cpp --- a/phonebookui/Phonebook2/ServerApplication/src/CPbk2ServerAppStoreManager.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/ServerApplication/src/CPbk2ServerAppStoreManager.cpp Tue May 11 16:00:21 2010 +0300 @@ -48,9 +48,6 @@ // Debugging headers #include -#include - - /// Unnamed namespace for local definitions namespace { @@ -71,50 +68,6 @@ } /// namespace -/** - * Helper class to filter mycard from phonebooks views - */ -class CPbk2MyCardFilter : public CBase, - public MVPbkContactSelector - { -public: - CPbk2MyCardFilter(); - ~CPbk2MyCardFilter(); -protected: // From MVPbkContactSelector - TBool IsContactIncluded( - const MVPbkBaseContact& aContact ); - }; - -CPbk2MyCardFilter::CPbk2MyCardFilter() - { - } - -CPbk2MyCardFilter::~CPbk2MyCardFilter() - { - } - -TBool CPbk2MyCardFilter::IsContactIncluded( - const MVPbkBaseContact& aContact ) - { - TBool isContactIncluded( ETrue ); - // this is temporary solution to hide own contact from phonebook contacts list, - // TODO remove this code when we can hide own contact with contact model - - MVPbkBaseContact& contact = const_cast( aContact ); - TAny* extension = contact.BaseContactExtension( - KVPbkBaseContactExtension2Uid ); - - if( extension ) - { - MVPbkBaseContact2* baseContactExtension = - static_cast( extension ); - TInt error( KErrNone ); - isContactIncluded = - ( !baseContactExtension->IsOwnContact( error ) ); - } - - return isContactIncluded; - } // -------------------------------------------------------------------------- // CPbk2ServerAppStoreManager::CPbk2ServerAppStoreManager @@ -140,7 +93,6 @@ delete iSortOrderAcquirer; delete iMonitor; delete iFetchView; - delete iMyCardFilter; } // -------------------------------------------------------------------------- @@ -220,22 +172,11 @@ CPbk2ContactViewBuilder* viewBuilder = CPbk2ContactViewBuilder::NewLC ( iContactManager, aStoreProperties ); - if( !iMyCardFilter ) - { - FeatureManager::InitializeLibL(); - if( FeatureManager::FeatureSupported( KFeatureIdffContactsMycard ) ) - { - iMyCardFilter = new (ELeave) CPbk2MyCardFilter(); - } - FeatureManager::UnInitializeLib(); - } - - if ( aViewType == EVPbkContactsView ) { result = viewBuilder->CreateContactViewForStoresLC ( aStoreUris, *this, aSortOrderManager.SortOrder(), - aViewFilter, aFlags, iMyCardFilter ); + aViewFilter, aFlags ); CleanupStack::Pop(); // result } else if ( aViewType == EVPbkGroupsView ) diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/UIControls/inc/CPbk2ContactViewListBoxModel.h --- a/phonebookui/Phonebook2/UIControls/inc/CPbk2ContactViewListBoxModel.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/UIControls/inc/CPbk2ContactViewListBoxModel.h Tue May 11 16:00:21 2010 +0300 @@ -119,7 +119,7 @@ CPbk2ContactViewListBoxModel::TParams& aParams ); void ConstructL(CPbk2StorePropertyArray* aStoreProperties, MPbk2ContactUiControlExtension* aUiExtension); - void FormatBufferL( + virtual void FormatBufferL( const TInt aIndex ) const; void FormatEmptyBuffer() const; virtual void FormatBufferForContactL( diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/UIControls/inc/cpbk2contactviewcustomlistboxitemdrawer.h --- a/phonebookui/Phonebook2/UIControls/inc/cpbk2contactviewcustomlistboxitemdrawer.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/UIControls/inc/cpbk2contactviewcustomlistboxitemdrawer.h Tue May 11 16:00:21 2010 +0300 @@ -200,6 +200,7 @@ protected: +#ifndef RD_TOUCH2 /** * Draw the item background. * @@ -208,6 +209,8 @@ * @param aRect Drawing area. */ void DrawCurrentItemRect(const TRect& aRect) const; + +#endif /** * Array of properties. diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/UIControls/inc/cpbk2contactviewdoublelistbox.h --- a/phonebookui/Phonebook2/UIControls/inc/cpbk2contactviewdoublelistbox.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/UIControls/inc/cpbk2contactviewdoublelistbox.h Tue May 11 16:00:21 2010 +0300 @@ -58,7 +58,7 @@ CCoeControl& aContainer, TResourceReader& aResourceReader, const CVPbkContactManager& aManager, - MVPbkContactViewBase& aView, + MPbk2FilteredViewStack& aView, MPbk2ContactNameFormatter& aNameFormatter, CPbk2StorePropertyArray& aStoreProperties, MPbk2ContactUiControlExtension* aUiExtension, @@ -91,7 +91,7 @@ CCoeControl& aContainer, MPbk2ContactUiControlExtension* aUiExtension, CPbk2PredictiveSearchFilter& aSearchFilter, - MVPbkContactViewBase& aView, + MPbk2FilteredViewStack& aView, CPbk2ThumbnailManager& aThumbManager ); /* @@ -101,7 +101,7 @@ CCoeControl& aContainer, TResourceReader& aResourceReader, const CVPbkContactManager& aManager, - MVPbkContactViewBase& aView, + MPbk2FilteredViewStack& aView, MPbk2ContactNameFormatter& aNameFormatter, CPbk2StorePropertyArray& aStoreProperties ); @@ -121,7 +121,7 @@ private: //data //REF: View - MVPbkContactViewBase& iView; + MPbk2FilteredViewStack& iView; //REF: thumbnail manager CPbk2ThumbnailManager& iThumbManager; }; diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/UIControls/inc/cpbk2contactviewdoublelistboxmodel.h --- a/phonebookui/Phonebook2/UIControls/inc/cpbk2contactviewdoublelistboxmodel.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/UIControls/inc/cpbk2contactviewdoublelistboxmodel.h Tue May 11 16:00:21 2010 +0300 @@ -26,6 +26,8 @@ class CPbk2ThumbnailManager; class MPbk2ContactUiControlDoubleListboxExtension; class CPbk2ContactViewDoubleListboxDataElement; +class CDataElementCache; +class MPbk2FilteredViewStack; // CLASS DECLARATION @@ -45,7 +47,8 @@ */ static CPbk2ContactViewDoubleListBoxModel* NewL( CPbk2ContactViewListBoxModel::TParams& aParams, - CPbk2ThumbnailManager& aThumbManager ); + CPbk2ThumbnailManager& aThumbManager, + MPbk2FilteredViewStack& aFilteredViewStack ); /** * Destructor. @@ -61,7 +64,8 @@ */ CPbk2ContactViewDoubleListBoxModel( CPbk2ContactViewListBoxModel::TParams& aParams, - CPbk2ThumbnailManager& aThumbManager ); + CPbk2ThumbnailManager& aThumbManager, + MPbk2FilteredViewStack& aFilteredViewStack ); protected: // new @@ -87,15 +91,27 @@ * * @param aIconId Id of the icon in icon array */ - void AppendIconIndexIfFound( const TPbk2IconId& aIconId ) const; - + void AppendIconIndexIfFound( const TPbk2IconId& aIconId ) const; + + void FormatBufferForElementDataL( + CPbk2ContactViewDoubleListboxDataElement& aDataElement, + TInt aIndex ) const; + + void AppendThumbnailL( + CPbk2ContactViewDoubleListboxDataElement& aDataElement, + TInt aIndex ) const; + + void FetchDataFromExtension( + CPbk2ContactViewDoubleListboxDataElement& aDataElement, + TInt aIndex ) const; + public: // From CPbk2ContactViewListBoxModel - + void FormatBufferL( + const TInt aIndex ) const; /// See CPbk2ContactViewListBoxModel void FormatBufferForContactL( const MVPbkViewContact& aViewContact, TInt aIndex ) const; - private: //data //REF: thumbnail manager @@ -104,6 +120,11 @@ /// Ref MPbk2ContactUiControlDoubleListboxExtension* iDoubleListExtensionPoint; + /// Own: + CDataElementCache* iDataElementCache; + + /// Ref + MPbk2FilteredViewStack& iFilteredViewStack; }; #endif // CPBK2CONTACTVIEWDOUBLELISTBOXMODEL_H diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/UIControls/inc/pbk2contactviewdoublelistboxdataelement.h --- a/phonebookui/Phonebook2/UIControls/inc/pbk2contactviewdoublelistboxdataelement.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/UIControls/inc/pbk2contactviewdoublelistboxdataelement.h Tue May 11 16:00:21 2010 +0300 @@ -25,6 +25,7 @@ #include //FORWARD +class MVPbkContactLink; // CLASS DECLARATION @@ -37,12 +38,16 @@ public MPbk2DoubleListboxDataElement { public: // constructor and destructor - static CPbk2ContactViewDoubleListboxDataElement* NewLC(); + static CPbk2ContactViewDoubleListboxDataElement* NewL( + MVPbkContactLink* aLink = NULL, + TInt aListIndex = KErrNotFound ); ~CPbk2ContactViewDoubleListboxDataElement(); TPtr TextPtr( MPbk2DoubleListboxDataElement::TTextDataElementItems aIndex) const; - + inline const MVPbkContactLink* ContactLink(); + inline TInt ListIndex(); + public: // from MPbk2DoubleListboxDataElement const TPbk2IconId& IconId( MPbk2DoubleListboxDataElement::TIconDataElementItems aIndex ) const; @@ -59,16 +64,33 @@ HBufC* aBuffer, MPbk2DoubleListboxDataElement::TTextDataType aType ); private: - inline CPbk2ContactViewDoubleListboxDataElement(); + inline CPbk2ContactViewDoubleListboxDataElement(TInt aListIndex); inline void ConstructL(); private: TFixedArray iIcons; TFixedArray iTexts; TFixedArray iTextType; + /// Own HBufC* iEmptyBuffer; + /// Own: for data cache + MVPbkContactLink* iLink; + /// for data cache + TInt iListIndex; }; - + +inline const MVPbkContactLink* +CPbk2ContactViewDoubleListboxDataElement::ContactLink() + { + return iLink; + } + +inline TInt CPbk2ContactViewDoubleListboxDataElement::ListIndex() + { + return iListIndex; + } + + #endif // PBK2CONTACTVIEWDOUBLELISTBOXDATAELEMENT_H // End of File diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/UIControls/src/CPbk2AdaptiveSearchGridFiller.cpp --- a/phonebookui/Phonebook2/UIControls/src/CPbk2AdaptiveSearchGridFiller.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/UIControls/src/CPbk2AdaptiveSearchGridFiller.cpp Tue May 11 16:00:21 2010 +0300 @@ -22,13 +22,17 @@ #include "MVPbkContactViewBase.h" #include "MPbk2ContactNameFormatter.h" +#include #include #include +#include const TInt KMaxAdaptiveGridCacheCount = 10; const TInt KAdaptiveSearchKeyMapGranularity = 100; const TInt KAdaptiveSearchRefineStep = 10; -const TInt KContactFormattingFlags = MPbk2ContactNameFormatter::EPreserveLeadingSpaces | MPbk2ContactNameFormatter::EReplaceNonGraphicChars; +const TInt KContactFormattingFlags = MPbk2ContactNameFormatter::EPreserveLeadingSpaces | + MPbk2ContactNameFormatter::EReplaceNonGraphicChars | + MPbk2ContactNameFormatter::EDisableCompanyNameSeparator; NONSHARABLE_CLASS(CPbk2AdaptiveGrid) : public CBase @@ -181,20 +185,42 @@ { const MVPbkViewContact& contact = iView->ContactAtL( iCounter ); const TInt titleLength = iNameFormatter.MaxTitleLength( contact.Fields(), KContactFormattingFlags ); - HBufC* title = HBufC::NewLC( titleLength ); - TPtr ptrTitle = title->Des(); - iNameFormatter.GetContactTitle( contact.Fields(), ptrTitle, KContactFormattingFlags ); - BuildGridL( ptrTitle, *iSearchString, iKeyMap ); + HBufC* title = NULL; + + if( FeatureManager::FeatureSupported( KFeatureIdFfContactsCompanyNames ) ) + { + MPbk2ContactNameFormatter2* nameformatterExtension = + reinterpret_cast( iNameFormatter. + ContactNameFormatterExtension( MPbk2ContactNameFormatterExtension2Uid ) ); + if ( nameformatterExtension && titleLength ) + { + title = nameformatterExtension->GetContactTitleWithCompanyNameL( contact.Fields(), + KContactFormattingFlags ); + + } + } + else if ( titleLength ) + { + title = iNameFormatter.GetContactTitleL( contact.Fields(), KContactFormattingFlags ); + } + + if ( !title ) + { + title = HBufC::NewL( titleLength ); + } + + CleanupStack::PushL( title ); + BuildGridL( *title, *iSearchString, iKeyMap ); // check number of spaces in the contact title - TInt numberOfSpaces = NumberOfSpacesInString( ptrTitle ); + TInt numberOfSpaces = NumberOfSpacesInString( *title ); if ( numberOfSpaces > maxSpacesNumber ) { maxSpacesNumber = numberOfSpaces; } // Check if the contact's title include drgraphs, // if it is, add it to array to save. - if ( IsDigraphContactsTitleL( ptrTitle ) ) + if ( IsDigraphContactsTitleL( *title ) ) { iDigraphContactsTitleArray.AppendL( title ); CleanupStack::Pop(); //title diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/UIControls/src/CPbk2ContactEditorDlgImpl.cpp --- a/phonebookui/Phonebook2/UIControls/src/CPbk2ContactEditorDlgImpl.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/UIControls/src/CPbk2ContactEditorDlgImpl.cpp Tue May 11 16:00:21 2010 +0300 @@ -843,12 +843,6 @@ // void CPbk2ContactEditorDlgImpl::SetInitialCurrentLine() { - TRAPD( err, ActivateFirstPageL() ); - if(err) - { - return; - } - TInt focusedIndex = 0; if ( iParams.iFocusedContactField ) { @@ -3379,31 +3373,36 @@ TEventCode aType ) { MPbk2ContactEditorField* editorField = aCurrentField->ContactEditorField(); - MVPbkStoreContactField& contactField = editorField->ContactField(); - TVPbkFieldStorageType dataType = contactField.FieldData().DataType(); - - if ( EVPbkFieldStorageTypeText == dataType ) + if ( editorField ) { - const MVPbkContactFieldTextData& textData = - MVPbkContactFieldTextData::Cast(contactField.FieldData()); - TInt maxSize = textData.MaxLength(); + MVPbkStoreContactField& contactField = editorField->ContactField(); + TVPbkFieldStorageType dataType = contactField.FieldData().DataType(); - if ( KVPbkUnlimitedFieldLength != maxSize && - IsCheckPointEvent( aKeyEvent, aType ) ) + if ( EVPbkFieldStorageTypeText == dataType ) { - CEikEdwin* ctrl = editorField->Control(); - HBufC* textBuf = ctrl->GetTextInHBufL(); + const MVPbkContactFieldTextData& textData = + MVPbkContactFieldTextData::Cast(contactField.FieldData()); + TInt maxSize = textData.MaxLength(); - if ( textBuf ) + if ( KVPbkUnlimitedFieldLength != maxSize && + IsCheckPointEvent( aKeyEvent, aType ) ) { - TInt maxLen = maxSize; - if ( IsUnicodeL( *textBuf ) ) + CEikEdwin* ctrl = editorField->Control(); + HBufC* textBuf = ctrl->GetTextInHBufL(); + + if ( textBuf ) { - maxLen = maxSize / KTwoBytes - KExtraByte; - } - if ( ctrl->MaxLength() != maxLen && textBuf->Length() <= maxLen ) - { - ctrl->SetMaxLength( maxLen ); + CleanupStack::PushL( textBuf ); + TInt maxLen = maxSize; + if ( IsUnicodeL( *textBuf ) ) + { + maxLen = maxSize / KTwoBytes - KExtraByte; + } + if ( ctrl->MaxLength() != maxLen && textBuf->Length() <= maxLen ) + { + ctrl->SetMaxLength( maxLen ); + } + CleanupStack::PopAndDestroy( textBuf ); } } } diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/UIControls/src/CPbk2ContactIconsUtils.cpp --- a/phonebookui/Phonebook2/UIControls/src/CPbk2ContactIconsUtils.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/UIControls/src/CPbk2ContactIconsUtils.cpp Tue May 11 16:00:21 2010 +0300 @@ -96,6 +96,7 @@ const MVPbkViewContact& aViewContact, RArray& aIconArray ) const { + CleanupClosePushL( aIconArray ); aIconArray.Reset(); // get dynamic icons from ui extension @@ -134,6 +135,7 @@ } } } + CleanupStack::Pop(); } // End of File diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/UIControls/src/CPbk2ContactViewListBox.cpp --- a/phonebookui/Phonebook2/UIControls/src/CPbk2ContactViewListBox.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/UIControls/src/CPbk2ContactViewListBox.cpp Tue May 11 16:00:21 2010 +0300 @@ -427,7 +427,10 @@ const RPointerArray* aCommands ) { iListboxModelDecorator->SetListCommands( aCommands ); - iColumnData->SetListCommands( aCommands ); + if( iColumnData ) + { + iColumnData->SetListCommands( aCommands ); + } } // -------------------------------------------------------------------------- @@ -520,7 +523,7 @@ model->SetUnnamedText( iResourceData.iUnnamedText ); iModel = model; - if(FeatureManager::FeatureSupported(KFeatureIdFfContactsPredictiveSearch)) + if( iColumnData ) { iColumnData->SetDataModel( iModel ); } @@ -589,18 +592,26 @@ // void CPbk2ContactViewListBox::CreateItemDrawerL() { - CPbk2ContactViewCustomListBoxData* columnData = - CPbk2ContactViewCustomListBoxData::NewL( iSearchFilter ); - - CleanupStack::PushL( columnData ); - - iItemDrawer=new(ELeave) CPbk2ContactViewCustomListBoxItemDrawer( - static_cast(Model()), iCoeEnv->NormalFont(), - columnData); - CleanupStack::Pop( columnData ); - - //Ownership has been transferred to iItemDrawer - iColumnData = columnData; + // Use custom drawer only if predictive search is enabled + if( FeatureManager::FeatureSupported(KFeatureIdFfContactsPredictiveSearch) ) + { + CPbk2ContactViewCustomListBoxData* columnData = + CPbk2ContactViewCustomListBoxData::NewL( iSearchFilter ); + + CleanupStack::PushL( columnData ); + + iItemDrawer=new(ELeave) CPbk2ContactViewCustomListBoxItemDrawer( + static_cast(Model()), iCoeEnv->NormalFont(), + columnData); + CleanupStack::Pop( columnData ); + + //Ownership has been transferred to iItemDrawer + iColumnData = columnData; + } + else + { + CAknSingleGraphicStyleListBox::CreateItemDrawerL(); + } } // -------------------------------------------------------------------------- diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/UIControls/src/CPbk2NamesListControl.cpp --- a/phonebookui/Phonebook2/UIControls/src/CPbk2NamesListControl.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/UIControls/src/CPbk2NamesListControl.cpp Tue May 11 16:00:21 2010 +0300 @@ -876,7 +876,8 @@ iContainer( aContainer ), iNameFormatter( aNameFormatter ), iStoreProperties( aStoreProperties ), - iAllowPointerEvents( ETrue ) + iAllowPointerEvents( ETrue ), + iOpeningCca( EFalse ) { } @@ -897,7 +898,8 @@ iNameFormatter( aNameFormatter ), iStoreProperties( aStoreProperties ), iAllowPointerEvents( ETrue ), - iThumbManager( aThumbManager ) + iThumbManager( aThumbManager ), + iOpeningCca( EFalse ) { } @@ -2401,14 +2403,33 @@ // reset too. So, we reset both the find box and the view stack. TRAPD( res, { - // This will reset back to base view - iCurrentState->ResetFindL(); + // This will reset back to base view, however retain original view + //when opening CCA + if( !iOpeningCca ) + { + iCurrentState->ResetFindL(); + } }); HandleError( res ); if( !iCheckMassUpdate->MassUpdateCheckThis() ) { - Reset(); + // If it is the first time to goto a contat's cca card, then in cca we + // will set a defualt number to that contact by CmsSetVoiceCallDefault. + // Then db item changed event is notified to ui layer and names list control + // updated accordingly. But to end user that is not allowed, so use this + // flag to avoid this reset of ui control. + if( iOpeningCca ) + { + if( iCurrentState->NamesListState() == EStateEmpty ) + { + SelectAndChangeReadyStateL(); + } + } + else + { + Reset(); + } } // Do not handle contact addition here (DoHandleContactAdditionL), @@ -2603,6 +2624,15 @@ } // --------------------------------------------------------------------------- +// CPbk2NamesListControl::SetOpeningCca +// --------------------------------------------------------------------------- +// +EXPORT_C void CPbk2NamesListControl::SetOpeningCca( TBool aIsOpening ) + { + iOpeningCca = aIsOpening; + } + +// --------------------------------------------------------------------------- // CPbk2NamesListControlBgTask::CPbk2NamesListControlBgTask // --------------------------------------------------------------------------- // diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/UIControls/src/CPbk2ThumbnailManager.cpp --- a/phonebookui/Phonebook2/UIControls/src/CPbk2ThumbnailManager.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/UIControls/src/CPbk2ThumbnailManager.cpp Tue May 11 16:00:21 2010 +0300 @@ -414,7 +414,9 @@ // CPbk2ThumbnailManager::GetPbkIconIndexL() // -------------------------------------------------------------------------- // -TInt CPbk2ThumbnailManager::GetPbkIconIndexL( TInt aListboxIndex, const MVPbkBaseContact& aContactLink ) +TInt CPbk2ThumbnailManager::GetPbkIconIndexL( + TInt aListboxIndex, + const MVPbkContactLink& aContactLink ) { TInt arrIndex = iDefaultIconIndex; @@ -424,7 +426,7 @@ CPbk2TmItem* item = iContactThumbnails[ aListboxIndex ]; if( !item ) { - item = CPbk2TmItem::NewL( aContactLink.CreateLinkLC(), aListboxIndex ); + item = CPbk2TmItem::NewL( aContactLink.CloneLC(), aListboxIndex ); CleanupStack::Pop(); // link // set default icon index item->SetIconArrayIndexAndId( iDefaultIconIndex,iDefaultIconId ); @@ -1032,16 +1034,39 @@ } else { - // there is items in the listbox that are not loaded yet. If there is favorite contacts, - // those are added afterwards to the list. normal items are added first. - const TInt itemCount = aView.ContactCountL() - thumbnailCount; - for( TInt i = 0; i < itemCount; ++i ) + // Check if view count has changed + if ( aView.ContactCountL() != thumbnailCount ) { - iContactThumbnails.InsertL( NULL, 0 ); - } - if( itemCount > 0 ) - { - ResetIndexes(); + if( iLoadingQueue.Count() > 0 ) + { + // store item that is currently in processing + iInProgressItemToBeRemoved = iLoadingQueue[0]; + } + + for ( TInt i = thumbnailCount - 1; i >= 0; --i ) + { + CPbk2TmItem* item = iContactThumbnails[i]; + if ( item ) + { + // check that the icon is not a default icon + if( iIconArray && item->GetIconArrayIndex() != iDefaultIconIndex ) + { + // inform icon array to remove the icon + iIconArray->RemoveIcon( item->GetIconId() ); + } + + if ( iInProgressItemToBeRemoved == item ) + { + // prevent item from being deleted later + iContactThumbnails[i] = NULL; + } + } + } + + // reset and recreate arrays + iLoadingQueue.Reset(); + iPriorityArray.Reset(); + PreCreateThumbnailArrayL( aView ); } } } diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/UIControls/src/cpbk2contactviewcustomlistboxdata.cpp --- a/phonebookui/Phonebook2/UIControls/src/cpbk2contactviewcustomlistboxdata.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/UIControls/src/cpbk2contactviewcustomlistboxdata.cpp Tue May 11 16:00:21 2010 +0300 @@ -35,6 +35,8 @@ #include #include #include +#include +#include #ifdef RD_UI_TRANSITION_EFFECTS_LIST @@ -97,6 +99,12 @@ } //End of Code Added for PhoneBook2 + +//Note: +//**** +//PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES +//Define this Flag once Pbk2 decides to implement the MarkingMode changes that has been implemented for Avkon Lists + /** * About animation usage: * All animation usage is implemented in this class. Animation is eye candy and @@ -161,6 +169,7 @@ void DeleteAnim(); void FocusGained(); void FocusLost(); + void SkinChangedL(); void SkinChanged(); void SetControl( CCoeControl* aControl ); @@ -186,6 +195,9 @@ CWindowGc& aGc, const TRect& aOutRect, const TRect& aInnerRect ) const; + + void LoadMarkingIconsL(); + public: //for handling column alignment struct TColumnExt { @@ -284,6 +296,8 @@ CArrayFix* iColumnExtArray; //for column alignment TRect iMarginRect; + + CAknIconArray* iMarkingIconArray; }; /** @@ -349,6 +363,11 @@ iKineticScrolling = CAknPhysics::FeatureEnabled(); + +#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + LoadMarkingIconsL(); +#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + } CPbk2ContactViewCustomListBoxDataExtension::~CPbk2ContactViewCustomListBoxDataExtension() @@ -372,6 +391,12 @@ delete iColorBmp; delete iHiliBmp; delete iColumnExtArray; + if ( iMarkingIconArray ) + { + iMarkingIconArray->ResetAndDestroy(); + } + + delete iMarkingIconArray; } MAknsControlContext* CPbk2ContactViewCustomListBoxDataExtension::SkinBackgroundContext() const @@ -561,6 +586,19 @@ } // ----------------------------------------------------------------------------- +// CPbk2ContactViewCustomListBoxDataExtension::SkinChangedL +// ----------------------------------------------------------------------------- +// +void CPbk2ContactViewCustomListBoxDataExtension::SkinChangedL() + { +#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + DeleteAnim(); + TryCreateAnimation(); + CreateColorBitmapsL(); + LoadMarkingIconsL(); +#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + } +// ----------------------------------------------------------------------------- // CPbk2ContactViewCustomListBoxDataExtension::SkinChanged // ----------------------------------------------------------------------------- // @@ -1144,6 +1182,44 @@ KAknsIIDQsnFrListCenterPressed ); } +// ----------------------------------------------------------------------------- +// CPbk2ContactViewCustomListBoxDataExtension::LoadMarkingIconsL +// ----------------------------------------------------------------------------- +// +void CPbk2ContactViewCustomListBoxDataExtension::LoadMarkingIconsL() + { +#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + if ( !iMarkingIconArray ) + { + iMarkingIconArray = new ( ELeave ) CAknIconArray( 2 ); + } + else + { + iMarkingIconArray->ResetAndDestroy(); + } + + CGulIcon* icon = AknsUtils::CreateGulIconL( AknsUtils::SkinInstance(), + KAknsIIDQgnPropCheckboxOn, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_prop_checkbox_on, + EMbmAvkonQgn_prop_checkbox_on_mask ); + + CleanupStack::PushL( icon ); + iMarkingIconArray->AppendL( icon ); + CleanupStack::Pop( icon ); + + icon = AknsUtils::CreateGulIconL( AknsUtils::SkinInstance(), + KAknsIIDQgnPropCheckboxOff, + AknIconUtils::AvkonIconFileName(), + EMbmAvkonQgn_prop_checkbox_off, + EMbmAvkonQgn_prop_checkbox_off_mask ); + + CleanupStack::PushL( icon ); + iMarkingIconArray->AppendL( icon ); + CleanupStack::Pop( icon ); +#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + } + CCoeControl *CPbk2ContactViewCustomListBoxData::Control() const { return iExtension->iControl; @@ -1950,12 +2026,38 @@ const TColors& aColors, TInt aItemIndex ) const { + + CEikListBox* listbox = static_cast( iExtension->iControl ); + if ( listbox && !listbox->View()->ViewRect().Intersects( aRect ) ) + { + // outside of the clipping rect -> don't process this item + return; + } + TInt lastColumn = Min( LastColumn(), KMaxColumn ); TInt column=0; TPtrC text; TPtrC tempText; TRgb aTextColor = aHighlight ? aColors.iHighlightedText : aColors.iText; + +#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + TBool markingMode = EFalse; + TRect itemRect( aRect ); + + if ( listbox->View() && listbox->View()->ItemDrawer() ) + { + if ( listbox->View()->ItemDrawer()->Flags() + & CListItemDrawer::EMarkingModeEnabled + && iExtension->iMarkingIconArray + && iExtension->iMarkingIconArray->Count() == 2 ) + { + markingMode = ETrue; + itemRect.iTl.iX += + AknLayoutScalable_Avkon::list_single_graphic_pane_t1( 0 ).LayoutLine().il; + } + } +#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES MAknsSkinInstance *skin = AknsUtils::SkinInstance(); MAknsControlContext *cc = AknsDrawUtils::ControlContext( Control() ); @@ -1971,10 +2073,13 @@ if ( iExtension->iSubCellsMightIntersect ) { +#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + CheckIfSubCellsIntersectL( &textLines[0], &rectClipped[0], *aText, itemRect ); + } +#else CheckIfSubCellsIntersectL( &textLines[0], &rectClipped[0], *aText, aRect ); } - - CEikListBox* listbox = static_cast( iExtension->iControl ); +#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES #ifdef RD_UI_TRANSITION_EFFECTS_LIST MAknListBoxTfxInternal *transApi = CAknListLoader::TfxApiInternal( &aGc ); #endif // RD_UI_TRANSITION_EFFECTS_LIST @@ -2015,6 +2120,42 @@ } DrawHighLight( aGc, aRect, aHighlight, skin ); +#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + if ( markingMode && !aItemProperties.IsSelectionHidden() ) + { + TAknLayoutRect layoutRect; + layoutRect.LayoutRect( aRect, + AknLayoutScalable_Avkon::list_single_graphic_pane_g1( 0 ) ); + + aGc.SetPenColor( aColors.iText ); + aGc.SetPenStyle( CGraphicsContext::ESolidPen ); + + CGulIcon* icon = (*iExtension->iMarkingIconArray)[1]; // unchecked + + if ( listbox->View()->ItemIsSelected( iExtension->iCurrentRow ) ) + { + icon = (*iExtension->iMarkingIconArray)[0]; + } + + CFbsBitmap* bitmap = icon->Bitmap(); + + if ( bitmap ) + { + TSize size( bitmap->SizeInPixels() ); // set size if not already + TSize targetSize( layoutRect.Rect().Size() ); + + if ( size.iWidth != targetSize.iWidth && size.iHeight != targetSize.iHeight ) + { + AknIconUtils::SetSize( bitmap, targetSize, + EAspectRatioPreservedAndUnusedSpaceRemoved ); + } + + aGc.BitBltMasked( layoutRect.Rect().iTl, bitmap, TRect( layoutRect.Rect().Size() ), icon->Mask(), EFalse ); + } + + } +#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + // The column draw loop column = 0; TInt subCellIndex = 0; @@ -2129,8 +2270,13 @@ } TAknLayoutText textLayout; +#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + textLayout.LayoutText( itemRect, textLineLayout, usedFont ); + TRect layoutedRect( itemRect); +#else textLayout.LayoutText( aRect, textLineLayout, usedFont ); TRect layoutedRect( aRect ); +#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES // *2 == leave some room for marquee const TInt maxlen( KMaxColumnDataLength * 2 ); @@ -2177,7 +2323,11 @@ { iExtension->iMarquee->UseLogicalToVisualConversion( bidiConv ); +#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + if ( iExtension->iMarquee->DrawText( aGc, itemRect, textLineLayout, convBuf, usedFont, textColor ) ) +#else if ( iExtension->iMarquee->DrawText( aGc, aRect, textLineLayout, convBuf, usedFont, textColor ) ) +#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES { // all the loops have been executed textLayout.DrawText( aGc, convBuf, bidiConv, textColor ); @@ -2279,7 +2429,11 @@ TAknWindowLineLayout graphicLayout = iExtension->AtSL(subCellIndex).iGraphicLayout; TAknLayoutRect graphicRect; +#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + graphicRect.LayoutRect( itemRect,graphicLayout ); +#else graphicRect.LayoutRect(aRect,graphicLayout); +#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES TSize graphicSize( graphicRect.Rect().Size() ); if (index>=0 && IconArray()) @@ -2374,11 +2528,36 @@ return; } +#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + CEikListBox* listbox = static_cast( iExtension->iControl ); + TBool markingMode = EFalse; + TRect itemRect( aRect ); + + if ( listbox->View() && listbox->View()->ItemDrawer() ) + { + if ( listbox->View()->ItemDrawer()->Flags() + & CListItemDrawer::EMarkingModeEnabled && + iExtension->iMarkingIconArray && + iExtension->iMarkingIconArray->Count() == 2 ) + { + markingMode = ETrue; + itemRect.iTl.iX += + AknLayoutScalable_Avkon::list_single_graphic_pane_t1( 0 ).LayoutLine().il; + } + } +#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + TInt extraVerticalSpace=(aRect.Height()-font->HeightInPixels()); TInt baseLineOffset=extraVerticalSpace/2+font->AscentInPixels(); +#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + TRect textRect( itemRect ); + TRect textMRect; // textrect with margins. + textRect.iBr.iX = itemRect.iTl.iX; +#else TRect textRect( aRect ); TRect textMRect; // textrect with margins. textRect.iBr.iX=aRect.iTl.iX; +#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES TInt column=0; TPtrC text; @@ -2388,11 +2567,20 @@ // be too difficult to do without - and this is cleaner solution. // pass 1, figures out x-coordinates for columns. +#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + TInt x = itemRect.iTl.iX; +#else TInt x = aRect.iTl.iX; +#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + TBool mirror = AknLayoutUtils::LayoutMirrored(); if (mirror) { +#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + x = itemRect.iBr.iX; +#else x = aRect.iBr.iX; +#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES } TInt maxx = x; while(column <= lastColumn) @@ -2465,12 +2653,14 @@ cc = SkinBackgroundContext(); } +#ifndef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES // aRect is list item's rect, width of which is smaller than width of the list // with a scroll bar. List needs to draw under scroll bar anyway, so we need to // modify given rect here. TRect r(aRect); CEikListBox* listbox = static_cast( iExtension->iControl ); +#endif // !PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES #ifdef RD_UI_TRANSITION_EFFECTS_LIST @@ -2507,8 +2697,13 @@ #endif // RD_UI_TRANSITION_EFFECTS_LIST } +#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + if ( iExtension->iCurrentRow < listbox->BottomItemIndex() ) +#else CEikListBox* list = static_cast( iExtension->iControl ); + if ( iExtension->iCurrentRow < list->BottomItemIndex() ) +#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES { AknListUtils::DrawSeparator( aGc, aRect, aColors.iText, skin ); } @@ -2525,6 +2720,49 @@ } #endif // RD_UI_TRANSITION_EFFECTS_LIST +#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + if ( markingMode && !aItemProperties.IsSelectionHidden() ) + { + TAknLayoutRect layoutRect; + layoutRect.LayoutRect( + aRect, + AknLayoutScalable_Avkon::list_single_graphic_pane_g1( 0 ) ); + + aGc.SetPenColor( aColors.iText ); + aGc.SetPenStyle( CGraphicsContext::ESolidPen ); + + CGulIcon* icon = (*iExtension->iMarkingIconArray)[1]; // unchecked + + if ( listbox->View()->ItemIsSelected( iExtension->iCurrentRow ) ) + { + icon = (*iExtension->iMarkingIconArray)[0]; + } + + CFbsBitmap* bitmap = icon->Bitmap(); + + if ( bitmap ) + { + TSize size( bitmap->SizeInPixels() ); // set size if not already + TSize targetSize( layoutRect.Rect().Size() ); + + if ( size.iWidth != targetSize.iWidth && + size.iHeight != targetSize.iHeight ) + { + AknIconUtils::SetSize( + bitmap, + targetSize, + EAspectRatioPreservedAndUnusedSpaceRemoved ); + } + + aGc.BitBltMasked( layoutRect.Rect().iTl, + bitmap, + TRect( layoutRect.Rect().Size() ), + icon->Mask(), + EFalse ); + } + } +#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + // The column draw loop column = 0; FOREVER @@ -3144,7 +3382,11 @@ // too. if( KAknsMessageSkinChange == aType ) { +#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + TRAP_IGNORE( iExtension->SkinChangedL() ); +#else iExtension->SkinChanged(); +#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES } else if(aType == KEikDynamicLayoutVariantSwitch) { diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/UIControls/src/cpbk2contactviewcustomlistboxitemdrawer.cpp --- a/phonebookui/Phonebook2/UIControls/src/cpbk2contactviewcustomlistboxitemdrawer.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/UIControls/src/cpbk2contactviewcustomlistboxitemdrawer.cpp Tue May 11 16:00:21 2010 +0300 @@ -50,6 +50,11 @@ #include "cpbk2contactviewcustomlistboxitemdrawer.h" //End of Code Added for PhoneBook2 +//Note: +//**** +//PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES +//Define this Flag once Pbk2 decides to implement the MarkingMode changes that has been implemented for Avkon Lists + // // Class CPbk2ContactViewCustomListBoxItemDrawer // @@ -143,6 +148,7 @@ data->SetItemCellSize( iItemCellSize ); } +#ifndef RD_TOUCH2 void CPbk2ContactViewCustomListBoxItemDrawer::DrawCurrentItemRect(const TRect& aRect) const // // Draw the item background @@ -154,6 +160,7 @@ iGc->DrawRect(aRect); iGc->CancelClippingRect(); } +#endif // !RD_TOUCH2 /** * Returns a pointer to the column data. Does not imply transfer of ownership. @@ -203,6 +210,13 @@ TInt pos = -1; TBool removeicon = (!aItemIsSelected && !ItemMarkReverse()) || (aItemIsSelected && ItemMarkReverse()); +#ifdef PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES + + if ( Flags() & CListItemDrawer::EMarkingModeEnabled ) + { + removeicon = EFalse; + } +#endif // PBK2_AVKON_TOUCH_MARKINGMODE_CHANGES if ( Flags() & EDrawMarkSelection && ItemMarkPosition() != -1 && removeicon) { repl.Set( ItemMarkReplacement() ); diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/UIControls/src/cpbk2contactviewdoublelistbox.cpp --- a/phonebookui/Phonebook2/UIControls/src/cpbk2contactviewdoublelistbox.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/UIControls/src/cpbk2contactviewdoublelistbox.cpp Tue May 11 16:00:21 2010 +0300 @@ -44,7 +44,7 @@ CCoeControl& aContainer, MPbk2ContactUiControlExtension* aUiExtension, CPbk2PredictiveSearchFilter& aSearchFilter, - MVPbkContactViewBase& aView, + MPbk2FilteredViewStack& aView, CPbk2ThumbnailManager& aThumbManager ) : CPbk2ContactViewListBox( aContainer, aUiExtension, aSearchFilter ), iView( aView ), @@ -73,7 +73,7 @@ CCoeControl& aContainer, TResourceReader& aResourceReader, const CVPbkContactManager& aManager, - MVPbkContactViewBase& aView, + MPbk2FilteredViewStack& aView, MPbk2ContactNameFormatter& aNameFormatter, CPbk2StorePropertyArray& aStoreProperties, MPbk2ContactUiControlExtension* aUiExtension, @@ -100,7 +100,7 @@ CCoeControl& aContainer, TResourceReader& aResourceReader, const CVPbkContactManager& aManager, - MVPbkContactViewBase& aView, + MPbk2FilteredViewStack& aView, MPbk2ContactNameFormatter& aNameFormatter, CPbk2StorePropertyArray& aStoreProperties ) { @@ -124,7 +124,8 @@ CPbk2ContactViewListBoxModel* CPbk2ContactViewDoubleListBox::DoCreateModelL( CPbk2ContactViewListBoxModel::TParams params ) { - return CPbk2ContactViewDoubleListBoxModel::NewL( params, iThumbManager ); + return CPbk2ContactViewDoubleListBoxModel::NewL( + params, iThumbManager, iView ); } diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/UIControls/src/cpbk2contactviewdoublelistboxmodel.cpp --- a/phonebookui/Phonebook2/UIControls/src/cpbk2contactviewdoublelistboxmodel.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/UIControls/src/cpbk2contactviewdoublelistboxmodel.cpp Tue May 11 16:00:21 2010 +0300 @@ -39,6 +39,7 @@ #include #include #include +#include // CONSTANTS namespace { @@ -64,17 +65,272 @@ // rest 56 are reserved for icon data const TInt KMaxTxtLength = 100; +const TInt KDataElementCacheSize = 20; } +/** + * Cache for data elements, cache is made to avoid performance problems that + * caused in cases when avkon implementation calls multiple times MdcaPoint function with same index + * Cached items must be deleted when there is any change in contact list. + */ +NONSHARABLE_CLASS( CDataElementCache ) : + public CBase, + public MVPbkContactViewObserver, + public MPbk2FilteredViewStackObserver + { +public: + static CDataElementCache* NewL(MPbk2FilteredViewStack& aView); + ~CDataElementCache(); + + void AppendL( CPbk2ContactViewDoubleListboxDataElement* aDataElement ); + CPbk2ContactViewDoubleListboxDataElement* Element( TInt aListIndex ); + +private: // From MVPbkContactViewObserver + void ContactViewReady( + MVPbkContactViewBase& aView ); + void ContactViewUnavailable( + MVPbkContactViewBase& aView ); + void ContactAddedToView( + MVPbkContactViewBase& aView, + TInt aIndex, + const MVPbkContactLink& aContactLink ); + void ContactRemovedFromView( + MVPbkContactViewBase& aView, + TInt aIndex, + const MVPbkContactLink& aContactLink ); + void ContactViewError( + MVPbkContactViewBase& aView, + TInt aError, + TBool aErrorNotified ); + +private: // From MPbk2FilteredViewStackObserver + void TopViewChangedL( + MVPbkContactViewBase& aOldView ); + void TopViewUpdatedL(); + void BaseViewChangedL(); + void ViewStackError( + TInt aError ); + void ContactAddedToBaseView( + MVPbkContactViewBase& aBaseView, + TInt aIndex, + const MVPbkContactLink& aContactLink ); + +private: + inline CDataElementCache( MPbk2FilteredViewStack& aView ); + inline void ConstructL(); + inline void Reset(); + +private: + RPointerArray iCache; + MPbk2FilteredViewStack& iView; + }; + +// -------------------------------------------------------------------------- +// CDataElementCache::NewL +// -------------------------------------------------------------------------- +// +CDataElementCache* CDataElementCache::NewL( MPbk2FilteredViewStack& aView ) + { + CDataElementCache* self = new (ELeave) CDataElementCache(aView); + CleanupStack::PushL( self ); + self->ConstructL(); + CleanupStack::Pop( self ); + return self; + } + +// -------------------------------------------------------------------------- +// CDataElementCache::CDataElementCache +// -------------------------------------------------------------------------- +// +inline CDataElementCache::CDataElementCache( MPbk2FilteredViewStack& aView ) +: iCache( KDataElementCacheSize ), + iView( aView ) + { + } + +// -------------------------------------------------------------------------- +// CDataElementCache::ConstructL +// -------------------------------------------------------------------------- +// +inline void CDataElementCache::ConstructL() + { + iView.AddObserverL(*this); + iView.AddStackObserverL(*this); + } + +// -------------------------------------------------------------------------- +// CDataElementCache::~CDataElementCache +// -------------------------------------------------------------------------- +// +CDataElementCache::~CDataElementCache() + { + Reset(); + iView.RemoveObserver(*this); + iView.RemoveStackObserver(*this); + } + +// -------------------------------------------------------------------------- +// CDataElementCache::AppendL +// -------------------------------------------------------------------------- +// +void CDataElementCache::AppendL( + CPbk2ContactViewDoubleListboxDataElement* aDataElement ) + { + iCache.InsertL( aDataElement, 0 ); + const TInt cacheItemCount( iCache.Count() ); + if( cacheItemCount > KDataElementCacheSize ) + { + delete iCache[cacheItemCount - 1]; + iCache.Remove(cacheItemCount - 1); + } + } + +// -------------------------------------------------------------------------- +// CDataElementCache::Reset +// -------------------------------------------------------------------------- +// +inline void CDataElementCache::Reset() + { + iCache.ResetAndDestroy(); + } + +// -------------------------------------------------------------------------- +// CDataElementCache::Element +// -------------------------------------------------------------------------- +// +CPbk2ContactViewDoubleListboxDataElement* +CDataElementCache::Element( TInt aListIndex ) + { + const TInt cacheItemCount( iCache.Count() ); + for( TInt i = 0 ; i < cacheItemCount ; ++i ) + { + CPbk2ContactViewDoubleListboxDataElement* p = iCache[i]; + if( p->ListIndex() == aListIndex ) + { + return p; + } + } + return NULL; + } + +// -------------------------------------------------------------------------- +// CDataElementCache::ContactViewReady +// -------------------------------------------------------------------------- +// +void CDataElementCache::ContactViewReady( + MVPbkContactViewBase& /*aView*/ ) + { + Reset(); + } + +// -------------------------------------------------------------------------- +// CDataElementCache::ContactViewUnavailable +// -------------------------------------------------------------------------- +// +void CDataElementCache::ContactViewUnavailable( + MVPbkContactViewBase& /*aView*/ ) + { + Reset(); + } + +// -------------------------------------------------------------------------- +// CDataElementCache::ContactAddedToView +// -------------------------------------------------------------------------- +// +void CDataElementCache::ContactAddedToView( + MVPbkContactViewBase& /*aView*/, + TInt /*aIndex*/, + const MVPbkContactLink& /*aContactLink*/ ) + { + Reset(); + } + +// -------------------------------------------------------------------------- +// CDataElementCache::ContactRemovedFromView +// -------------------------------------------------------------------------- +// +void CDataElementCache::ContactRemovedFromView( + MVPbkContactViewBase& /*aView*/, + TInt /*aIndex*/, + const MVPbkContactLink& /*aContactLink*/ ) + { + Reset(); + } + +// -------------------------------------------------------------------------- +// CDataElementCache::ContactViewError +// -------------------------------------------------------------------------- +// +void CDataElementCache::ContactViewError( + MVPbkContactViewBase& /*aView*/, + TInt /*aError*/, + TBool /*aErrorNotified*/ ) + { + Reset(); + } + +// -------------------------------------------------------------------------- +// CDataElementCache::TopViewChangedL +// -------------------------------------------------------------------------- +// +void CDataElementCache::TopViewChangedL( + MVPbkContactViewBase& /*aOldView*/ ) + { + Reset(); + } + +// -------------------------------------------------------------------------- +// CDataElementCache::TopViewUpdatedL +// -------------------------------------------------------------------------- +// +void CDataElementCache::TopViewUpdatedL() + { + Reset(); + } + +// -------------------------------------------------------------------------- +// CDataElementCache::BaseViewChangedL +// -------------------------------------------------------------------------- +// +void CDataElementCache::BaseViewChangedL() + { + Reset(); + } + +// -------------------------------------------------------------------------- +// CDataElementCache::ViewStackError +// -------------------------------------------------------------------------- +// +void CDataElementCache::ViewStackError( + TInt /*aError*/ ) + { + Reset(); + } + +// -------------------------------------------------------------------------- +// CDataElementCache::ContactAddedToBaseView +// -------------------------------------------------------------------------- +// +void CDataElementCache::ContactAddedToBaseView( + MVPbkContactViewBase& /*aBaseView*/, + TInt /*aIndex*/, + const MVPbkContactLink& /*aContactLink*/ ) + { + Reset(); + } + + // -------------------------------------------------------------------------- // CPbk2ContactViewDoubleListBoxModel::CPbk2ContactViewDoubleListBoxModel // -------------------------------------------------------------------------- // CPbk2ContactViewDoubleListBoxModel::CPbk2ContactViewDoubleListBoxModel( CPbk2ContactViewListBoxModel::TParams& aParams, - CPbk2ThumbnailManager& aThumbManager ) : + CPbk2ThumbnailManager& aThumbManager, + MPbk2FilteredViewStack& aFilteredViewStack ) : CPbk2ContactViewListBoxModel( aParams ), - iThumbManager( aThumbManager ) + iThumbManager( aThumbManager ), + iFilteredViewStack( aFilteredViewStack ) { TAny* object = aParams.iUiExtension->ContactUiControlExtensionExtension ( TUid::Uid( KPbk2ContactUiControlExtensionExtensionUID ) ); @@ -88,6 +344,7 @@ // CPbk2ContactViewDoubleListBoxModel::~CPbk2ContactViewDoubleListBoxModel() { + delete iDataElementCache; } // -------------------------------------------------------------------------- @@ -96,43 +353,118 @@ // CPbk2ContactViewDoubleListBoxModel* CPbk2ContactViewDoubleListBoxModel::NewL( CPbk2ContactViewListBoxModel::TParams& aParams, - CPbk2ThumbnailManager& aThumbManager ) + CPbk2ThumbnailManager& aThumbManager, + MPbk2FilteredViewStack& aFilteredViewStack ) { CPbk2ContactViewDoubleListBoxModel* self = - new ( ELeave ) CPbk2ContactViewDoubleListBoxModel( aParams, aThumbManager ); + new ( ELeave ) CPbk2ContactViewDoubleListBoxModel( + aParams, aThumbManager, aFilteredViewStack ); CleanupStack::PushL(self); self->ConstructL( aParams.iStoreProperties, aParams.iUiExtension ); + self->iDataElementCache = CDataElementCache::NewL( aFilteredViewStack ); CleanupStack::Pop(); return self; } // -------------------------------------------------------------------------- +// CPbk2ContactViewDoubleListBoxModel::FormatBufferL +// -------------------------------------------------------------------------- +// +void CPbk2ContactViewDoubleListBoxModel::FormatBufferL( const TInt aIndex ) const + { + PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING + ("CPbk2ContactViewDoubleListBoxModel::FormatBufferL(0x%x,%d), begin"), + this); + CPbk2ContactViewDoubleListboxDataElement* element = + iDataElementCache->Element( aIndex ); + if( element ) + { + FormatBufferForElementDataL(*element, aIndex); + } + else + { + const MVPbkViewContact& contact = iView->ContactAtL(aIndex); + FormatBufferForContactL(contact, aIndex ); + } + + PBK2_DEBUG_PRINT(PBK2_DEBUG_STRING + ("CPbk2ContactViewDoubleListBoxModel::FormatBufferL(0x%x,%d), end"), + this); + } + + +// -------------------------------------------------------------------------- +// CPbk2ContactViewDoubleListBoxModel::FormatBufferForElementDataL +// -------------------------------------------------------------------------- +// +void CPbk2ContactViewDoubleListBoxModel::FetchDataFromExtension( + CPbk2ContactViewDoubleListboxDataElement& aDataElement, + TInt aIndex ) const + { + // Get element data from extension + // + if( iDoubleListExtensionPoint ) + { + TRAPD( err, + iDoubleListExtensionPoint->FormatDataL( + *(aDataElement.ContactLink()), aDataElement ) ); + if( err ) + { + // extension's errors are ignored. + PBK2_DEBUG_PRINT( PBK2_DEBUG_STRING( + "CPbk2ContactViewDoubleListBoxModel::FormatBufferForElementDataL format error %d"), + err ); + } + } + + // Clip secondary text if it's a phone number + if( MPbk2DoubleListboxDataElement::ETypePhoneNumber == + aDataElement.TextType( MPbk2DoubleListboxDataElement::EStatusText ) && + iClipListBoxText ) + { + TPtr secondary( aDataElement.TextPtr( + MPbk2DoubleListboxDataElement::EStatusText ) ); + iClipListBoxText->ClipFromBeginning( + secondary, aIndex, KSecondaryTextColumn ); + } + } + +// -------------------------------------------------------------------------- +// CPbk2ContactViewDoubleListBoxModel::FormatBufferForElementDataL +// -------------------------------------------------------------------------- +// +void CPbk2ContactViewDoubleListBoxModel::FormatBufferForElementDataL( + CPbk2ContactViewDoubleListboxDataElement& aDataElement, + TInt aIndex ) const + { + FetchDataFromExtension(aDataElement, aIndex); + + // start fill the new buffer for the avkon list + iBuffer.Zero(); + + AppendThumbnailL( aDataElement, aIndex ); + + // Format line buffer based on element's content + FormatBufferFromElement( aDataElement ); + } + +// -------------------------------------------------------------------------- // CPbk2ContactViewDoubleListBoxModel::FormatBufferForContactL // -------------------------------------------------------------------------- // void CPbk2ContactViewDoubleListBoxModel::FormatBufferForContactL( - const MVPbkViewContact& aViewContact, TInt aIndex ) const + const MVPbkViewContact& aViewContact, + TInt aIndex ) const { - // Reset buffer - iBuffer.Zero(); - + MVPbkContactLink* link = aViewContact.CreateLinkLC(); CPbk2ContactViewDoubleListboxDataElement* element = - CPbk2ContactViewDoubleListboxDataElement::NewLC(); + CPbk2ContactViewDoubleListboxDataElement::NewL( link, aIndex ); + CleanupStack::Pop(); // link + CleanupStack::PushL( element ); - // Fill data element cells - - // (1) Add thumbnail icon - // - TInt index = iThumbManager.GetPbkIconIndexL( aIndex, aViewContact ); - if( index != KErrNotFound ) - { - iBuffer.AppendNum( index ); - } - iBuffer.Append( KListColumnSeparator ); - - // (2) Add contact name - // + // get data for element + // get user name HBufC* name = NULL; if( FeatureManager::FeatureSupported( KFeatureIdFfContactsCompanyNames )) { @@ -164,12 +496,8 @@ MPbk2DoubleListboxDataElement::ETypeGenericText ); CleanupStack::Pop( name ); - // (3) Secondary text - // - // => Empty by default - - // (4) Trailing icon - // + + // get icons RArray ids; CleanupClosePushL( ids ); iContactIcons->GetIconIdsForContactL( aViewContact, ids ); @@ -184,33 +512,18 @@ CleanupStack::PopAndDestroy( &ids ); // Get element data from extension - if( iDoubleListExtensionPoint ) - { - TRAPD( err, - iDoubleListExtensionPoint->FormatDataL( aViewContact, *element ) ); - if( err ) - { - // extension's errors are ignored. - PBK2_DEBUG_PRINT( PBK2_DEBUG_STRING( - "CPbk2ContactViewDoubleListBoxModel::FormatBufferForContactL format error %d"), - err ); - } - } + FetchDataFromExtension( *element, aIndex ); - // Clip secondary text if it's a phone number - if( MPbk2DoubleListboxDataElement::ETypePhoneNumber == - element->TextType( MPbk2DoubleListboxDataElement::EStatusText ) && iClipListBoxText ) - { - TPtr secondary( element->TextPtr( - MPbk2DoubleListboxDataElement::EStatusText ) ); - iClipListBoxText->ClipFromBeginning( - secondary, aIndex, KSecondaryTextColumn ); - } + // start format data for the avkon list + iBuffer.Zero(); + + AppendThumbnailL( *element, aIndex ); // Format line buffer based on element's content FormatBufferFromElement( *element ); - CleanupStack::PopAndDestroy( element ); + iDataElementCache->AppendL( element ); + CleanupStack::Pop( element ); } // -------------------------------------------------------------------------- @@ -225,9 +538,6 @@ // [thumbnail icon] \t [contact name] \t [secondary text] \t // [trailing icon] - // (1) Thumbnail icon - // No element support needed for thumbnail at the moment - // (2) Contact name AppendName( aElement.TextPtr( MPbk2DoubleListboxDataElement::EName ).Left( KMaxTxtLength ) ); @@ -243,6 +553,25 @@ } // -------------------------------------------------------------------------- +// CPbk2ContactViewDoubleListBoxModel::AppendThumbnailL +// -------------------------------------------------------------------------- +// +void CPbk2ContactViewDoubleListBoxModel::AppendThumbnailL( + CPbk2ContactViewDoubleListboxDataElement& aDataElement, + TInt aIndex ) const + { + // (1) Add thumbnail icon + // + TInt index = iThumbManager.GetPbkIconIndexL( + aIndex, *(aDataElement.ContactLink()) ); + if( index != KErrNotFound ) + { + iBuffer.AppendNum( index ); + } + iBuffer.Append( KListColumnSeparator ); + } + +// -------------------------------------------------------------------------- // CPbk2ContactViewDoubleListBoxModel::AppendText // -------------------------------------------------------------------------- // diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/UIControls/src/cpbk2doublelistboxmodelcmddecorator.cpp --- a/phonebookui/Phonebook2/UIControls/src/cpbk2doublelistboxmodelcmddecorator.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/UIControls/src/cpbk2doublelistboxmodelcmddecorator.cpp Tue May 11 16:00:21 2010 +0300 @@ -80,8 +80,7 @@ void CPbk2DoubleListboxModelCmdDecorator::ConstructL() { CPbk2ListboxModelCmdDecorator::ConstructL(); - iElement = CPbk2ContactViewDoubleListboxDataElement::NewLC(); - CleanupStack::Pop( iElement ); // member + iElement = CPbk2ContactViewDoubleListboxDataElement::NewL(); } // -------------------------------------------------------------------------- diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/UIControls/src/pbk2contactviewdoublelistboxdataelement.cpp --- a/phonebookui/Phonebook2/UIControls/src/pbk2contactviewdoublelistboxdataelement.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/UIControls/src/pbk2contactviewdoublelistboxdataelement.cpp Tue May 11 16:00:21 2010 +0300 @@ -15,18 +15,23 @@ */ #include "pbk2contactviewdoublelistboxdataelement.h" +#include // -------------------------------------------------------------------------- // CPbk2ContactViewDoubleListboxDataElement::NewLC // -------------------------------------------------------------------------- // -CPbk2ContactViewDoubleListboxDataElement* CPbk2ContactViewDoubleListboxDataElement::NewLC() +CPbk2ContactViewDoubleListboxDataElement* CPbk2ContactViewDoubleListboxDataElement::NewL( + MVPbkContactLink* aLink, + TInt aListIndex) { CPbk2ContactViewDoubleListboxDataElement* self = - new ( ELeave ) CPbk2ContactViewDoubleListboxDataElement(); + new ( ELeave ) CPbk2ContactViewDoubleListboxDataElement(aListIndex); CleanupStack::PushL(self); self->ConstructL(); + self->iLink = aLink; + CleanupStack::Pop(self); return self; } @@ -34,7 +39,9 @@ // CPbk2ContactViewDoubleListboxDataElement::CPbk2ContactViewDoubleListboxDataElement // -------------------------------------------------------------------------- // -inline CPbk2ContactViewDoubleListboxDataElement::CPbk2ContactViewDoubleListboxDataElement() +inline CPbk2ContactViewDoubleListboxDataElement::CPbk2ContactViewDoubleListboxDataElement( + TInt aListIndex) +: iListIndex( aListIndex ) { iTexts.Reset(); iIcons.Reset(); @@ -58,6 +65,7 @@ { iTexts.DeleteAll(); delete iEmptyBuffer; + delete iLink; } // -------------------------------------------------------------------------- diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/UIExtensionManager/src/CPbk2UIExtensionMenuManager.cpp --- a/phonebookui/Phonebook2/UIExtensionManager/src/CPbk2UIExtensionMenuManager.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/UIExtensionManager/src/CPbk2UIExtensionMenuManager.cpp Tue May 11 16:00:21 2010 +0300 @@ -100,6 +100,7 @@ void CPbk2UIExtensionMenuManager::PluginForCommandIdL( TInt aCommandId, RArray& aPluginUids ) const { + CleanupClosePushL( aPluginUids ); const TInt informationCount = iExtensionLoader.PluginInformation().Count(); for ( TInt i = 0; i < informationCount; ++i ) @@ -111,6 +112,7 @@ aPluginUids.AppendL( pluginInformation->ImplementationUid() ); } } + CleanupStack::Pop(); } // -------------------------------------------------------------------------- diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/UIPolicy/src/CPbk2ContactNameConstructionPolicy.cpp --- a/phonebookui/Phonebook2/UIPolicy/src/CPbk2ContactNameConstructionPolicy.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/UIPolicy/src/CPbk2ContactNameConstructionPolicy.cpp Tue May 11 16:00:21 2010 +0300 @@ -22,12 +22,15 @@ #include #include #include +#include #include // Virtual Phonebook #include #include +#include + // -------------------------------------------------------------------------- // CPbk2ContactNameConstructionPolicy::CPbk2ContactNameConstructionPolicy // -------------------------------------------------------------------------- @@ -46,6 +49,7 @@ { delete iSortOrderManager; delete iNameFormatter; + FeatureManager::UnInitializeLib(); } // -------------------------------------------------------------------------- @@ -74,6 +78,7 @@ iNameFormatter = Pbk2ContactNameFormatterFactory::CreateL ( iMasterFieldTypeList, *iSortOrderManager ); + FeatureManager::InitializeLibL(); } // -------------------------------------------------------------------------- @@ -85,8 +90,18 @@ ( const MVPbkBaseContactFieldCollection& aFieldCollection, CVPbkFieldTypeRefsList& aFieldTypeRefsList ) { - return iNameFormatter->ActualTitleFieldsLC - ( aFieldTypeRefsList, aFieldCollection ); + if( FeatureManager::FeatureSupported( KFeatureIdFfContactsCompanyNames ) ) + { + MPbk2ContactNameFormatter3* nameformatterExtension = + reinterpret_cast( iNameFormatter-> + ContactNameFormatterExtension( MPbk2ContactNameFormatterExtension3Uid ) ); + + if ( nameformatterExtension ) + { + return nameformatterExtension->TitleWithCompanyNameFieldsLC( aFieldTypeRefsList, aFieldCollection ); + } + } + return iNameFormatter->ActualTitleFieldsLC( aFieldTypeRefsList, aFieldCollection ); } // End of File diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlaunchercontainer.cpp --- a/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlaunchercontainer.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlaunchercontainer.cpp Tue May 11 16:00:21 2010 +0300 @@ -645,7 +645,7 @@ // Forwarding to listbox-model iModel->ContactFieldFetchedNotifyL(aContactField); - if( iStatusControl ) + if( iStatusControl && iStatusControl->IsVisible() ) { SetDefaultStatusTextL(); } @@ -673,7 +673,7 @@ iMdlRowCount = mdlCount; - if( iStatusControl ) + if( iStatusControl && iStatusControl->IsVisible() ) { SetDefaultStatusTextL(); } diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlauncherheadercontrol.cpp --- a/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlauncherheadercontrol.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/src/ccappcommlauncherheadercontrol.cpp Tue May 11 16:00:21 2010 +0300 @@ -174,13 +174,31 @@ // void CCCAppCommLauncherHeaderControl::SizeChanged() { - // No variation anymore in layout for portrait/landscape/statusbutton/ - // no statusbutton (iStatusButtonVisibility) combinations (options 0,1,2). - // Always use option 0. - //const TInt isLandscape = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0; + const TInt isLandscape = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0; const TRect rect(Rect()); - TInt option(0); + /** + * Option0 (w button, lsc) + * Option2 (w/o button, lsc) + * Option0 (w button, prt) + * Option1 (w/o button, prt) + */ + + // (w/o button) + TInt option( isLandscape ? 2 : 1 ); + if( iStatusButtonVisibility ) + { + // (w button) + if( isLandscape ) + { + option = 0; + } + else + { + option = 0; + } + } + FavoriteIconSizeChanged(); AknLayoutUtils::LayoutImage( @@ -397,7 +415,7 @@ // void CCCAppCommLauncherHeaderControl::SetContactStoreL(TCmsContactStore aContactStore) { - if (!iBitmap && !iMask) + if (!iBitmap && !iMask && !iHasContactImage ) { switch (aContactStore) { @@ -698,13 +716,24 @@ { //Set the size for the Favorite Icon //This code must be in Sync with SizeChanged() code - - // No variation anymore in layout for portrait/landscape/statusbutton/ - // no statusbutton (iStatusButtonVisibility) combinations (options 0,1,2). - // Always use option 0. - //const TInt isLandscape = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0; + const TInt isLandscape = Layout_Meta_Data::IsLandscapeOrientation() ? 1 : 0; const TRect rect(Rect()); - TInt option( 0 ); + + // (w/o button) + TInt option( isLandscape ? 2 : 1 ); + if( iStatusButtonVisibility ) + { + // (w button) + if( isLandscape ) + { + option = 0; + } + else + { + option = 0; + } + } + AknLayoutUtils::LayoutImage( iFavContactIcon, rect, AknLayoutScalable_Apps::phob2_cc_data_pane_g2(option)); diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/ccapplication/ccapp/inc/ccapppluginloader.h --- a/phonebookui/Phonebook2/ccapplication/ccapp/inc/ccapppluginloader.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/ccapplication/ccapp/inc/ccapppluginloader.h Tue May 11 16:00:21 2010 +0300 @@ -21,6 +21,7 @@ #include #include +#include class CCCAppView; class CCCAppPluginData; @@ -42,7 +43,9 @@ * @lib ccaapp.exe * @since S60 v5.0 */ -class CCCAppPluginLoader : public CBase +class CCCAppPluginLoader : + public CBase, + public MPbk2StoreConfigurationObserver { #ifdef __CCAPPUNITTESTMODE friend class T_CCCAppPluginLoader; @@ -178,6 +181,23 @@ TBool SetPluginVisibility( TUid aPlugin, TInt aVisibility); + + +private: + + /** + * Observer for store configuration changes. From MPbk2StoreConfigurationObserver + * + * @since S60 v9.2 + */ + void ConfigurationChanged(); + + /** + * Observer for completed store configuration changes. From MPbk2StoreConfigurationObserver + * + * @since S60 v9.2 + */ + void ConfigurationChangedComplete(); private: diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/ccapplication/ccapp/src/ccapppluginloader.cpp --- a/phonebookui/Phonebook2/ccapplication/ccapp/src/ccapppluginloader.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/ccapplication/ccapp/src/ccapppluginloader.cpp Tue May 11 16:00:21 2010 +0300 @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -131,6 +132,10 @@ delete iFactoryTempPtr; CCA_DP( KCCAppLogFile, CCA_L("<-CCCAppPluginData::~CCCAppPluginLoader")); + if(iAppServices) + { + iAppServices->StoreConfiguration().RemoveObserver(*this); + } Release( iAppServices ); iCommandsResourceFile.Close(); @@ -371,6 +376,7 @@ KPbk2RomFileDrive, KDC_RESOURCE_FILES_DIR, KPbk2CommonUiDllResFileName ); iAppServices = CPbk2ApplicationServices::InstanceL(); + iAppServices->StoreConfiguration().AddObserverL(*this); } // --------------------------------------------------------------------------- @@ -768,6 +774,7 @@ void CCCAppPluginLoader::GetPbksXPExtesionNamesL( RArray& aPbksXPExtesionNamesArray, const TDesC& aNameString) { + CleanupClosePushL( aPbksXPExtesionNamesArray ); TLex nameString ( aNameString ); TChar curChar; nameString.Mark(); @@ -787,6 +794,7 @@ nameString.Inc(); } } + CleanupStack::Pop(); } // --------------------------------------------------------------------------- @@ -1126,4 +1134,24 @@ } } +// ---------------------------------------------------------------------------- +// CCCAppPluginLoader::ConfigurationChanged +// ---------------------------------------------------------------------------- +// +void CCCAppPluginLoader::ConfigurationChanged() + { + //Special case. Store configuration changed, e.g. store containing current + //contact removed. So close CCA as current contact may not anymore be available + CAknAppUi* appUi = static_cast (CEikonEnv::Static()->AppUi()); + TRAP_IGNORE(appUi->HandleCommandL(EAknCmdExit)); + } + +// ---------------------------------------------------------------------------- +// CCCAppPluginLoader::ConfigurationChangedComplete +// ---------------------------------------------------------------------------- +// +void CCCAppPluginLoader::ConfigurationChangedComplete() + { + } + // End of File diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/group/10003A73.txt Binary file phonebookui/Phonebook2/group/10003A73.txt has changed diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/group/pbk2spbcontentprovider.mmp --- a/phonebookui/Phonebook2/group/pbk2spbcontentprovider.mmp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/group/pbk2spbcontentprovider.mmp Tue May 11 16:00:21 2010 +0300 @@ -66,5 +66,5 @@ LIBRARY pbk2commonui.lib LIBRARY presencecacheclient2.lib LIBRARY presencecacheutils.lib - +LIBRARY efsrv.lib // End of File diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/inc/CPbk2NamesListControl.h --- a/phonebookui/Phonebook2/inc/CPbk2NamesListControl.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/inc/CPbk2NamesListControl.h Tue May 11 16:00:21 2010 +0300 @@ -251,6 +251,12 @@ */ IMPORT_C void MassUpdateSkipProgressNote( TBool aSkip ); + /** + * Set the iOpeningCca flag. + * @param aIsOpening - Indicates user is opening cca or not. + */ + IMPORT_C void SetOpeningCca( TBool aIsOpening ); + public: // From CCoeControl void MakeVisible( TBool aVisible ); @@ -503,7 +509,8 @@ CPbk2NamesListControlBgTask* iBgTask; //Own: Mass update checker/handler CPbk2HandleMassUpdate* iCheckMassUpdate; - + //Own: Open Cca is in progress + TBool iOpeningCca; }; #endif // CPBK2NAMESLISTCONTROL_H diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/inc/CPbk2ThumbnailManager.h --- a/phonebookui/Phonebook2/inc/CPbk2ThumbnailManager.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/inc/CPbk2ThumbnailManager.h Tue May 11 16:00:21 2010 +0300 @@ -111,7 +111,7 @@ * Returns icon index from Pbk2IconArray for double listbox index. * If icon is not set, default icon index is returned */ - TInt GetPbkIconIndexL( TInt aListboxIndex, const MVPbkBaseContact& aContactLink ); + TInt GetPbkIconIndexL( TInt aListboxIndex, const MVPbkContactLink& aContactLink ); /* * Setter for default icon ID diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/inc/MPbk2ContactNameFormatter3.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/inc/MPbk2ContactNameFormatter3.h Tue May 11 16:00:21 2010 +0300 @@ -0,0 +1,64 @@ +/* +* Copyright (c) 2005-2007 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: Phonebook 2 contact name formatter interface. +* +*/ + + +#ifndef MPBK2CONTACTNAMEFORMATTER3_H +#define MPBK2CONTACTNAMEFORMATTER3_H + +//Use this UID to access field property interface extension 3. Used as +//a parameter to ContactNameFormatterExtension() method. +const TUid MPbk2ContactNameFormatterExtension3Uid = { 3 }; + +/** + * This class is an extension to MPbk2ContactNameFormatter. + * See documentation of MPbk2ContactNameFormatter from header + * MPbk2ContactNameFormatter.h + * + * you can access this extension by calling + * MPbk2ContactNameFormatter->ContactNameFormatterExtension() + */ +class MPbk2ContactNameFormatter3 + { + public: // Interface + + /** + * Return iterator that contains all fields that are used for making + * the formatted name. + * + * @param aFieldTypeList Field type list that is used to store + * field types for the iterator. The list + * will be resetted before use. + * @param aContactFields Field collection representing + * the data in a contact. + * @return Iterator for fields that are used for the formated title. + */ + virtual CVPbkBaseContactFieldTypeListIterator* TitleWithCompanyNameFieldsLC( + CVPbkFieldTypeRefsList& aFieldTypeList, + const MVPbkBaseContactFieldCollection& aContactFields ) = 0; + + protected: + + virtual ~MPbk2ContactNameFormatter3() + {} + + + + }; + +#endif // MPBK2CONTACTNAMEFORMATTER3_H + +// End of File diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/inc/pbk2contactuicontroldoublelistboxextension.h --- a/phonebookui/Phonebook2/inc/pbk2contactuicontroldoublelistboxextension.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/inc/pbk2contactuicontroldoublelistboxextension.h Tue May 11 16:00:21 2010 +0300 @@ -20,8 +20,7 @@ #define MPBK2CONTACTUICONTROLDOUBLELISTBOXEXTENSION_H // FORWARD DECLARATIONS -class MVPbkStoreContact; -class MVPbkViewContact; +class MVPbkContactLink; class MPbk2CommandItemUpdater; class TPbk2IconId; @@ -90,7 +89,7 @@ * */ virtual void FormatDataL( - const MVPbkViewContact& aViewContact, + const MVPbkContactLink& aContactLink, MPbk2DoubleListboxDataElement& aDataElement ) =0; /** diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/remotecontactlookup/engine/data/engine.rss --- a/phonebookui/Phonebook2/remotecontactlookup/engine/data/engine.rss Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/remotecontactlookup/engine/data/engine.rss Tue May 11 16:00:21 2010 +0300 @@ -83,16 +83,25 @@ items = { MENU_ITEM { command = ERclCmdSaveToContacts; txt = qtn_rcl_opt_save_contact; flags = EEikMenuItemSpecific;}, + + // Stylus Popup menu items for Call and Send actions (in Options Menu they are submenu items) + MENU_ITEM { command = ERclCmdVoiceCall; txt = qtn_rcl_stylus_popup_voice_call; flags = EEikMenuItemSpecific;}, + MENU_ITEM { command = ERclCmdVideoCall; txt = qtn_rcl_stylus_popup_video_call; flags = EEikMenuItemSpecific;}, + MENU_ITEM { command = ERclCmdSendMsg; txt = qtn_rcl_stylus_popup_msg; flags = EEikMenuItemSpecific;}, + MENU_ITEM { command = ERclCmdSendBusinessCard; txt = qtn_rcl_stylus_popup_bcard; flags = EEikMenuItemSpecific;}, + MENU_ITEM { command = ERclCmdSendEmail; txt = qtn_rcl_stylus_popup_email; flags = EEikMenuItemSpecific;}, + MENU_ITEM { command = ERclCmdViewDetails; txt = qtn_rcl_opt_details; flags = EEikMenuItemAction; }, - MENU_ITEM { command = ERclCmdAddAsRecipient; txt = qtn_rcl_opt_add_recipient; flags = EEikMenuItemSpecific;}, + MENU_ITEM { command = ERclCmdAddAsRecipient; txt = qtn_rcl_opt_add_recipient; flags = EEikMenuItemAction;}, MENU_ITEM { command = ERclCmdNewSearchPrefilled; txt = qtn_rcl_opt_new_search; }, - MENU_ITEM { command = ERclCmdCall; cascade = r_rcl_call_menu_pane; txt = qtn_rcl_opt_call; flags = EEikMenuItemSpecific; }, - MENU_ITEM { command = ERclCmdSend; cascade = r_rcl_send_menu_pane; txt = qtn_rcl_opt_send; flags = EEikMenuItemSpecific; }, + MENU_ITEM { command = ERclCmdCall; cascade = r_rcl_call_menu_pane; txt = qtn_rcl_opt_call; flags = EEikMenuItemAction; }, + MENU_ITEM { command = ERclCmdSend; cascade = r_rcl_send_menu_pane; txt = qtn_rcl_opt_send; flags = EEikMenuItemAction; }, MENU_ITEM { command = EAknCmdHelp; txt = qtn_options_help; }, MENU_ITEM { command = EAknCmdExit; txt = qtn_options_exit; } }; } + // // --------------------------------------------------------------------------- // Menu sub pane for call options @@ -103,9 +112,9 @@ { items = { - MENU_ITEM { command = ERclCmdVoiceCall; txt = qtn_rcl_opt_voice_call; flags = EEikMenuItemSpecific;}, - MENU_ITEM { command = ERclCmdVideoCall; txt = qtn_rcl_opt_video_call; flags = EEikMenuItemSpecific;}, - MENU_ITEM { command = ERclCmdVoip; txt = qtn_rcl_opt_voip; flags = EEikMenuItemSpecific;} + MENU_ITEM { command = ERclCmdVoiceCall; txt = qtn_rcl_opt_voice_call; flags = EEikMenuItemAction;}, + MENU_ITEM { command = ERclCmdVideoCall; txt = qtn_rcl_opt_video_call; flags = EEikMenuItemAction;}, + MENU_ITEM { command = ERclCmdVoip; txt = qtn_rcl_opt_voip; flags = EEikMenuItemAction;} }; } @@ -119,11 +128,11 @@ { items = { - MENU_ITEM { command = ERclCmdSendMsg; txt = qtn_rcl_opt_msg; flags = EEikMenuItemSpecific;}, - MENU_ITEM { command = ERclCmdSendBusinessCard; txt = qtn_rcl_opt_bcard; flags = EEikMenuItemSpecific;}, - MENU_ITEM { command = ERclCmdSendEmail; txt = qtn_rcl_opt_email; flags = EEikMenuItemSpecific;}, - MENU_ITEM { command = ERclCmdSendMeetingReq; txt = qtn_rcl_opt_mreq; flags = EEikMenuItemSpecific;}, - MENU_ITEM { command = ERclCmdSendAudioMsg; txt = qtn_rcl_opt_audio; flags = EEikMenuItemSpecific;} + MENU_ITEM { command = ERclCmdSendMsg; txt = qtn_rcl_opt_msg; flags = EEikMenuItemAction;}, + MENU_ITEM { command = ERclCmdSendBusinessCard; txt = qtn_rcl_opt_bcard; flags = EEikMenuItemAction;}, + MENU_ITEM { command = ERclCmdSendEmail; txt = qtn_rcl_opt_email; flags = EEikMenuItemAction;}, + MENU_ITEM { command = ERclCmdSendMeetingReq; txt = qtn_rcl_opt_mreq; flags = EEikMenuItemAction;}, + MENU_ITEM { command = ERclCmdSendAudioMsg; txt = qtn_rcl_opt_audio; flags = EEikMenuItemAction;} }; } @@ -189,12 +198,12 @@ RESOURCE MENU_PANE r_rcl_result_info_dialog_context_menu_pane { items = - { - MENU_ITEM { command = ERclCmdCopyDetail; txt = qtn_rcl_opt_copy_detail; }, - MENU_ITEM { command = ERclCmdVoiceCall; txt = qtn_rcl_opt_voice_call; }, - MENU_ITEM { command = ERclCmdVideoCall; txt = qtn_rcl_opt_video_call; }, - MENU_ITEM { command = ERclCmdSendMsg; txt = qtn_rcl_opt_msg; }, - MENU_ITEM { command = ERclCmdSendEmail; txt = qtn_rcl_opt_email; } + { + MENU_ITEM { command = ERclCmdVoiceCall; txt = qtn_rcl_stylus_popup_voice_call; }, + MENU_ITEM { command = ERclCmdVideoCall; txt = qtn_rcl_stylus_popup_video_call; }, + MENU_ITEM { command = ERclCmdSendMsg; txt = qtn_rcl_stylus_popup_msg; }, + MENU_ITEM { command = ERclCmdSendEmail; txt = qtn_rcl_stylus_popup_email; }, + MENU_ITEM { command = ERclCmdCopyDetail; txt = qtn_rcl_opt_copy_detail; } }; } @@ -257,7 +266,7 @@ { titles = { - MENU_TITLE { menu_pane = r_rcl_search_result_dialog_menu_pane; } + MENU_TITLE { menu_pane = r_rcl_search_result_dialog_menu_pane; } }; } diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/remotecontactlookup/engine/inc/cpbkxrclsearchresultdlg.h --- a/phonebookui/Phonebook2/remotecontactlookup/engine/inc/cpbkxrclsearchresultdlg.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/remotecontactlookup/engine/inc/cpbkxrclsearchresultdlg.h Tue May 11 16:00:21 2010 +0300 @@ -441,6 +441,8 @@ ///ETrue - if the more than max results note needs to be shown TBool iMoreThanMaxResults; + TBool iFocusableContactPointed; + // Title pane text. Owned. HBufC* iTitleText; // Original title pane text (of the caller view). Owned. diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbk2remotecontactlookupaccounts.cpp --- a/phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbk2remotecontactlookupaccounts.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbk2remotecontactlookupaccounts.cpp Tue May 11 16:00:21 2010 +0300 @@ -137,6 +137,7 @@ EXPORT_C void CPbk2RemoteContactLookupAccounts::GetAllAccountsL( RPointerArray& aAccounts ) { + CleanupClosePushL( aAccounts ); if ( iAdapters.Count() == 0 ) { // No plugins were loaded. @@ -170,6 +171,7 @@ } // just let protocolAccountsTmp pass out of scope. It doesn't own anything now. } + CleanupStack::Pop(); } @@ -179,7 +181,8 @@ const TUid& aProtocol ) { //TODO Should optimise this. - + CleanupClosePushL( aAccounts ); + RPointerArray protocolAccounts; TCleanupItem cleanupItemAcc(CleanupResetAndDestroyAccArray, &protocolAccounts); CleanupStack::PushL(cleanupItemAcc); @@ -203,6 +206,7 @@ protocolAccounts.Remove( j ); } CleanupStack::Pop(); // cleanupItemAcc + CleanupStack::Pop(); } CPbk2RemoteContactLookupAccounts::CPbk2RemoteContactLookupAccounts() diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbkxrclresultinfodlg.cpp --- a/phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbkxrclresultinfodlg.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbkxrclresultinfodlg.cpp Tue May 11 16:00:21 2010 +0300 @@ -837,6 +837,10 @@ iVisibleFocusOnList = EFalse; listBox->HandlePointerEventL( aPointerEvent ); break; + + default: + listBox->HandlePointerEventL( aPointerEvent ); + break; } } } diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbkxrclsearchresultdlg.cpp --- a/phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbkxrclsearchresultdlg.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/remotecontactlookup/engine/src/cpbkxrclsearchresultdlg.cpp Tue May 11 16:00:21 2010 +0300 @@ -383,9 +383,18 @@ CEikMenuPane* aMenuPane ) { FUNC_LOG; + if ( aResourceId == R_RCL_SEARCH_RESULT_DIALOG_MENU_PANE ) { - + if ( !iFocusableContactPointed ) // dim stylus popup menu + { + aMenuPane->SetItemDimmed( ERclCmdVoiceCall,ETrue ); + aMenuPane->SetItemDimmed( ERclCmdVideoCall, ETrue ); + aMenuPane->SetItemDimmed( ERclCmdSendMsg, ETrue ); + aMenuPane->SetItemDimmed( ERclCmdSendEmail, ETrue ); + aMenuPane->SetItemDimmed( ERclCmdSendBusinessCard, ETrue ); + } + if ( iContactItems.Count() == 0 ) { // when there are 0 results, only new search option is available @@ -399,20 +408,34 @@ { if ( !iContactSelectorEnabled ) { - + // dim Options Menu main level items aMenuPane->SetItemDimmed( ERclCmdAddAsRecipient, ETrue ); + // send menu is always visible, since business card can always be sent + aMenuPane->SetItemDimmed( ERclCmdCall, !CallActionsAvailable() ); - aMenuPane->SetItemDimmed( - ERclCmdCall, - !CallActionsAvailable() ); - - // send menu is always visible, since business card can - // always be sent + if ( iFocusableContactPointed ) // dim stylus popup menu items + { + // Call menus + aMenuPane->SetItemDimmed( ERclCmdVoiceCall, !iContactActionService.IsActionEnabled( KFscAtComCallGSM ) ); + aMenuPane->SetItemDimmed( ERclCmdVideoCall, !iContactActionService.IsActionEnabled( KFscAtComCallVideo ) ); + // Send menus + aMenuPane->SetItemDimmed( ERclCmdSendMsg, !iContactActionService.IsActionEnabled( KFscAtComSendMsg ) ); + aMenuPane->SetItemDimmed( ERclCmdSendEmail, !iContactActionService.IsActionEnabled( KFscAtComSendEmail ) ); + aMenuPane->SetItemDimmed( ERclCmdSendBusinessCard, !iContactActionService.IsActionEnabled( KFscAtSendBusinessCard ) ); + } } else { + // dim Options Menu main level items aMenuPane->SetItemDimmed( ERclCmdCall, ETrue ); aMenuPane->SetItemDimmed( ERclCmdSend, ETrue ); + + // dim stylus popup menu items + aMenuPane->SetItemDimmed( ERclCmdVoiceCall,ETrue ); + aMenuPane->SetItemDimmed( ERclCmdVideoCall, ETrue ); + aMenuPane->SetItemDimmed( ERclCmdSendMsg, ETrue ); + aMenuPane->SetItemDimmed( ERclCmdSendEmail, ETrue ); + aMenuPane->SetItemDimmed( ERclCmdSendBusinessCard, ETrue ); } aMenuPane->SetItemDimmed( @@ -422,7 +445,6 @@ } else if ( aResourceId == R_RCL_CALL_MENU_PANE ) { - aMenuPane->SetItemDimmed( ERclCmdVoiceCall, !iContactActionService.IsActionEnabled( KFscAtComCallGSM ) ); @@ -437,7 +459,7 @@ } else if ( aResourceId == R_RCL_SEND_MENU_PANE ) - { + { aMenuPane->SetItemDimmed( ERclCmdSendMsg, !iContactActionService.IsActionEnabled( KFscAtComSendMsg ) ); @@ -459,6 +481,7 @@ !iContactActionService.IsActionEnabled( KFscAtSendBusinessCard ) ); } + iFocusableContactPointed = EFalse; } // --------------------------------------------------------------------------- @@ -1172,11 +1195,11 @@ case TPointerEvent::EButton1Down: { TInt focusIndex; - TBool focusableContactPointed = + iFocusableContactPointed = listBox->View()->XYPosToItemIndex( aPointerEvent.iPosition, focusIndex ); - if ( focusableContactPointed && focusIndex > 0) + if ( iFocusableContactPointed ) { TInt oldIndex = iSelectedItemIndex; iSelectedItemIndex = focusIndex; @@ -1197,6 +1220,11 @@ listBox->HandlePointerEventL( aPointerEvent ); break; } + default: + { + listBox->HandlePointerEventL( aPointerEvent ); + break; + } } } } diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/remotecontactlookup/loc/phonebook2rcl.loc --- a/phonebookui/Phonebook2/remotecontactlookup/loc/phonebook2rcl.loc Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/remotecontactlookup/loc/phonebook2rcl.loc Tue May 11 16:00:21 2010 +0300 @@ -187,6 +187,31 @@ // r:5.2 #define qtn_rcl_opt_audio "Audio message" +// d:Header Stylus Popup and Context Specific menu for Voice call command. +// l:list_single_pane_t1_cp2 +// r:5.2 +#define qtn_rcl_stylus_popup_voice_call "Voice call" + +// d:Header Stylus Popup and Context Specific menu for Video call command. +// l:list_single_pane_t1_cp2 +// r:5.2 +#define qtn_rcl_stylus_popup_video_call "Video call" + +// d:Header Stylus Popup and Context Specific menu for Send message command. +// l:list_single_pane_t1_cp2 +// r:5.2 +#define qtn_rcl_stylus_popup_msg "Send message" + +// d:Header Stylus Popup and Context Specific menu for Send email command. +// l:list_single_pane_t1_cp2 +// r:5.2 +#define qtn_rcl_stylus_popup_email "Send email" + +// d:Header Stylus Popup and Context Specific menu for Send business card command. +// l:list_single_pane_t1_cp2 +// r:5.2 +#define qtn_rcl_stylus_popup_bcard "Send business card" + // d:Softkey text. // l:control_pane_t1/opt7 // r:5.2 @@ -352,7 +377,7 @@ // d:Wait note is displayed when retriving information for saving contact // d:to the database takes longer than 1 sec. -// l:popup_note_window/opt2 +// l:popup_note_wait_window // r:5.2 // #define qtn_rcl_saving_wait_note "Saving contact" diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/spbcontentprovider/src/spbcontactdatamodelprivate.cpp --- a/phonebookui/Phonebook2/spbcontentprovider/src/spbcontactdatamodelprivate.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/spbcontentprovider/src/spbcontactdatamodelprivate.cpp Tue May 11 16:00:21 2010 +0300 @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -423,8 +424,7 @@ TBool CSpbContactDataModelPrivate::IsHiddenField(const MVPbkFieldType* aFieldType) { TInt resId = aFieldType->FieldTypeResId(); - return ( resId == R_VPBK_FIELD_TYPE_SYNCCLASS || - resId == R_VPBK_FIELD_TYPE_CALLEROBJIMG ); + return ( resId == R_VPBK_FIELD_TYPE_SYNCCLASS ); } // --------------------------------------------------------------------------- @@ -454,13 +454,37 @@ } TPtrC fieldText = MVPbkContactFieldTextData::Cast(aFieldData).Text(); + TInt resId = aFieldType.FieldTypeResId(); + HBufC* defaultText = NULL; + if( resId == R_VPBK_FIELD_TYPE_CALLEROBJIMG ) + { + RFs& fs = iCoeEnv.FsSession(); + TEntry entry; + if ( fs.Entry( fieldText, entry) == KErrNone ) + { + // get image name + TParse parse; + parse.Set(fieldText, NULL, NULL); + fieldText.Set(parse.Name()); + + } + else + { + // use default image name + defaultText = iCoeEnv.AllocReadResourceLC( R_QTN_PHOB_FIELD_THUMBNAIL ); + fieldText.Set( defaultText->Des() ); + } + } TPtr columnBuf( ExpandColumnBufferL( fieldText.Length() ) ); columnBuf.Zero(); // replace listbox separator characters. Pbk2PresentationUtils::AppendAndReplaceChars( columnBuf, fieldText, KCharsToReplace, KReplacementChars ); - + if( defaultText ) + { + CleanupStack::PopAndDestroy( defaultText ); + } // Replace characters that can not be displayed correctly. Pbk2PresentationUtils::ReplaceNonGraphicCharacters( columnBuf, KReplacedChars ); diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Phonebook2/xSPExtensionManager/src/CxSPContactManager.cpp --- a/phonebookui/Phonebook2/xSPExtensionManager/src/CxSPContactManager.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Phonebook2/xSPExtensionManager/src/CxSPContactManager.cpp Tue May 11 16:00:21 2010 +0300 @@ -138,6 +138,7 @@ void CxSPContactManager::GetMappedPbkContactsL( TUint32 aId, TInt32 axSPContactId, RPointerArray& aPbkContactLinks ) const { + CleanupClosePushL( aPbkContactLinks ); TInt count = iContactMap.Count(); for( TInt i = 0; i < count; i++ ) { @@ -147,12 +148,14 @@ User::LeaveIfError( aPbkContactLinks.Append( map->iPbkContactLink ) ); } } + CleanupStack::Pop(); } void CxSPContactManager::GetMappedxSPContactsL( TUint32 aId, const MVPbkContactLink& aPbkContactLink, RArray& axSPContactIds ) const { + CleanupClosePushL( axSPContactIds ); const TInt count = iContactMap.Count(); for( TInt i = 0; i < count; i++ ) { @@ -165,6 +168,7 @@ } } } + CleanupStack::Pop(); } void CxSPContactManager::ViewActivatedL( const TVwsViewId& aPrevViewId, diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Speeddial/ControlInc/SpdiaGridDlg.h --- a/phonebookui/Speeddial/ControlInc/SpdiaGridDlg.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Speeddial/ControlInc/SpdiaGridDlg.h Tue May 11 16:00:21 2010 +0300 @@ -101,10 +101,11 @@ * from CAknDialog */ TBool OkToExitL(TInt aButtonId); + /** - * from CAknDialog - */ - void HandleDialogPageEventL (TInt); + * From CCoeControl,HandlePointerEventL. + */ + void HandlePointerEventL( const TPointerEvent& aPointerEvent ); protected: /** @@ -136,6 +137,8 @@ TInt iCbaID; TBool iNeedUpdate; TInt iPrevIndex; + // Grid index in which the button down + TInt iButton1DownIndex; }; #endif // SPDIAGRIDDLG_H diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Speeddial/ControlSrc/SpdiaGridDlg.cpp --- a/phonebookui/Speeddial/ControlSrc/SpdiaGridDlg.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Speeddial/ControlSrc/SpdiaGridDlg.cpp Tue May 11 16:00:21 2010 +0300 @@ -83,6 +83,7 @@ { iControl = CONST_CAST(CSpdiaControl*, &aControl); iCbaID = R_AVKON_SOFTKEYS_BACK; + iButton1DownIndex = 0; } // ---------------------------------------------------- @@ -369,13 +370,11 @@ if ( Layout_Meta_Data::IsLandscapeOrientation() ) { - StatusPane->MakeVisible( ETrue ); AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane,mainPaneRect ); StatusPane->DrawNow(); } else { - StatusPane->MakeVisible( EFalse ); AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, mainPaneRect ); AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EStatusPane, statusPaneRect ); mainPaneRect.iTl = statusPaneRect.iTl; @@ -395,14 +394,27 @@ } // --------------------------------------------------------- -// CSpdiaGridDlg::HandleDialogPageEventL() -// Handles the events on the dialog page (for Touch) +// CSpdiaGridDlg::HandlePointerEventL() +// Handle the pointer events on the dialog page, instead of HandleDialogPageEventL. +// Because HandleDialogPageEventL() can not handle the different pointer events. +// Only when the index button down is the same with the index button up, assign is right action. // --------------------------------------------------------- -// -void CSpdiaGridDlg::HandleDialogPageEventL(TInt /*aEventId*/) - { - // When clicking on grid, the function will simulate the event - // just like clicking on LSK - TryExitL( EAknSoftkeyOk ); - } +// +void CSpdiaGridDlg::HandlePointerEventL( const TPointerEvent& aPointerEvent ) + { + iGrid->HandlePointerEventL( aPointerEvent ); + if ( aPointerEvent.iType == TPointerEvent::EButton1Down ) + { + iGrid->View()->XYPosToItemIndex( aPointerEvent.iPosition, iButton1DownIndex ); + } + else if ( aPointerEvent.iType == TPointerEvent::EButton1Up ) + { + TInt button1UpIndex = -1; + iGrid->View()->XYPosToItemIndex( aPointerEvent.iPosition, button1UpIndex ); + if( iButton1DownIndex == button1UpIndex ) + { + TryExitL( EAknSoftkeyOk ); + } + } + } // End of File diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Speeddial/VPbkControlSrc/speeddialprivate.cpp --- a/phonebookui/Speeddial/VPbkControlSrc/speeddialprivate.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Speeddial/VPbkControlSrc/speeddialprivate.cpp Tue May 11 16:00:21 2010 +0300 @@ -1970,20 +1970,6 @@ if ( !CheckSpaceBelowCriticalLevelL() ) { - if ( iGridUsed == EGridNoUse && (*iSdmArray)[aIndex].Contact() == NULL ) - { - iQueryDialog = CAknQueryDialog::NewL(CAknQueryDialog::ENoTone); - TBool resDialog(EFalse); - TRAPD(error, - resDialog = iQueryDialog->ExecuteLD(R_SPDIA_QUERY_ASSIGN) ); - iQueryDialog = NULL; - User::LeaveIfError(error); - if (!resDialog) - { - result = EFalse; - } - } - if ( result && (*iSdmArray)[aIndex].Contact() != NULL ) { //if(iGridUsed == EGridNoUse)//because grid will be used if you want to replace or change @@ -2304,10 +2290,9 @@ CreateDataL( *iGrid ); } // If the view number note popped up and the customer delete the image of contact - // refresh the note dialog. + // Set the update flag. if ( iRefreshObserver && iCurrentIndex == findResult ) { - iRefreshObserver->RefreshDialog(); iUpdateFlag = ETrue; } } @@ -2853,58 +2838,70 @@ // --------------------------------------------------------- // void CSpeedDialPrivate::AppendTextL(const TSpdiaIndexDataVPbk& aSdmData, TPtr& aText) -{ - - if (aSdmData.Contact() == NULL) { - aText.Append(KDesTab2); - aText.Append(KDesTab2); - } + if ( aSdmData.Contact() == NULL ) + { + aText.Append( KDesTab2 ); + aText.Append( KDesTab2 ); + } else - { - // Test application name formatting logic is that take last name and - // first name and combine them using space as a separator. If either of - // them exists use company name. If there are still no name use "Unnamed" + { + // Test application name formatting logic is that take last name and + // first name and combine them using space as a separator. If either of + // them exists use company name. If there are still no name use "Unnamed" - // Get field types from the master field type list - const MVPbkFieldType* lastNameType = - iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_LASTNAME ); - const MVPbkFieldType* firstNameType = - iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME ); - const MVPbkFieldType* companyNameType = - iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_COMPANYNAME ); + // Get field types from the master field type list + const MVPbkFieldType* lastNameType = NULL; + const MVPbkFieldType* firstNameType = NULL; + const MVPbkFieldType* companyNameType = + iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_COMPANYNAME ); - CDesCArrayFlat* bufs = new( ELeave ) CDesCArrayFlat( 2 ); - CleanupStack::PushL( bufs ); + TInt language = User::Language(); + + CDesCArrayFlat* bufs = new( ELeave ) CDesCArrayFlat( 2 ); + CleanupStack::PushL( bufs ); - // Non-graphical characters are replaced with space - const TText KReplaceChar = ' '; + // Non-graphical characters are replaced with space + const TText KReplaceChar = ' '; - // Contact should have only one last name field - CVPbkBaseContactFieldTypeIterator* itr = - CVPbkBaseContactFieldTypeIterator::NewLC( *lastNameType, - aSdmData.Contact()->Fields() ); - while ( itr->HasNext() ) - { - const MVPbkBaseContactField* field = itr->Next(); - // last name field is text data - const MVPbkContactFieldTextData& data = - MVPbkContactFieldTextData::Cast( field->FieldData() ); - HBufC* lastName = data.Text().AllocLC(); + if ( ( language == ELangTaiwanChinese ) + || ( language == ELangHongKongChinese ) + || ( language == ELangPrcChinese ) ) + { + lastNameType = iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_LASTNAME ); + firstNameType = iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME ); + } + else + { + // Change the display order as first name - last name. + lastNameType = iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_FIRSTNAME ); + firstNameType = iContactManager->FieldTypes().Find( R_VPBK_FIELD_TYPE_LASTNAME ); + } + + // Contact should have only one last name field + CVPbkBaseContactFieldTypeIterator* itr = + CVPbkBaseContactFieldTypeIterator::NewLC( *lastNameType, aSdmData.Contact()->Fields() ); + while ( itr->HasNext() ) + { + const MVPbkBaseContactField* field = itr->Next(); + // last name field is text data + const MVPbkContactFieldTextData& data = + MVPbkContactFieldTextData::Cast( field->FieldData() ); + HBufC* lastName = data.Text().AllocLC(); - TPtr lName(NULL, 0); - lName.Set( lastName->Des() ); - ReplaceNonGraphicCharacters( lName, KReplaceChar ); + TPtr lName(NULL, 0); + lName.Set( lastName->Des() ); + ReplaceNonGraphicCharacters( lName, KReplaceChar ); - const TInt len = lName.Length(); - if (0 < len) - { - bufs->AppendL( lName); - } + const TInt len = lName.Length(); + if ( 0 < len ) + { + bufs->AppendL( lName); + } - CleanupStack::PopAndDestroy( lastName ); - } - CleanupStack::PopAndDestroy( itr ); + CleanupStack::PopAndDestroy( lastName ); + } + CleanupStack::PopAndDestroy( itr ); // Contact should have only one first name field itr = CVPbkBaseContactFieldTypeIterator::NewLC( *firstNameType, diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Speeddial/inc/SpdiaContainer.h --- a/phonebookui/Speeddial/inc/SpdiaContainer.h Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Speeddial/inc/SpdiaContainer.h Tue May 11 16:00:21 2010 +0300 @@ -151,6 +151,11 @@ * Set status pane to the normal status. */ void SetStatusPaneL(); + + /** + * Check whether the view note is displaying when making speeddial to background. + */ + CSpdiaNoteDialog* GetViewDialogStatus(); public: // Functions from CCoeControl classes /** diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Speeddial/src/SpdiaContainer.cpp --- a/phonebookui/Speeddial/src/SpdiaContainer.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Speeddial/src/SpdiaContainer.cpp Tue May 11 16:00:21 2010 +0300 @@ -379,6 +379,7 @@ TRAP_IGNORE( iGrid->ScrollBarFrame()->SetScrollBarVisibilityL( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EOff ) ); + iGrid->ScrollBarFrame()->VerticalScrollBar()->SetRect( TRect( 0,0,0,0 ) ); CFormattedCellListBoxData* data = iGrid->ItemDrawer()->FormattedCellData(); data->SetTransparentSubCellL( SDM_TN_CIF_TURNED, ETrue ); //5 @@ -1046,6 +1047,17 @@ return; } + // check if the position is in grid view + CAknGridView* gridView = iGrid->GridView(); + TInt itemIndex = 0; + TRect visibleItemsRect(gridView->ViewRect().iTl, + TSize(gridView->ItemSize(itemIndex).iWidth * gridView->NumberOfColsInView(), + gridView->ItemSize(itemIndex).iHeight * gridView->NumberOfRowsInView())); + if (!visibleItemsRect.Contains(aPointerEvent.iPosition)) + { + return; + } + // Check if touch is enabled or not. if ( !AknLayoutUtils::PenEnabled() ) { @@ -1148,14 +1160,14 @@ // -------------------------------------------------------------------------- // void CSpdiaContainer::HandleLongTapEventL( - const TPoint& /*aPenEventLocation*/, - const TPoint& aPenEventScreenLocation ) + const TPoint& aPenEventLocation, + const TPoint& /*aPenEventScreenLocation*/ ) { // Get the Current Data Index TInt itemIndex( KErrNotFound ); // Get position when user press screen - iGrid->View()->XYPosToItemIndex( aPenEventScreenLocation, itemIndex ); + iGrid->View()->XYPosToItemIndex( aPenEventLocation, itemIndex ); // Compare two index if ( AknLayoutUtils::PenEnabled() && ( itemIndex == iGrid->CurrentDataIndex() ) ) @@ -1202,7 +1214,7 @@ statusPane->SwitchLayoutL( R_AVKON_STATUS_PANE_LAYOUT_USUAL ); } - if ( statusPane->IsVisible() ) + if ( statusPane->IsVisible()&&(!iView->IsShowVmbxDlg()) ) { statusPane->MakeVisible( EFalse ); } @@ -1248,4 +1260,14 @@ break; } } + + // -------------------------------------------------------------------------- + // CSpdiaContainer::GetViewDialogStatus + // Check whether the view note is displaying when making speeddial to background. + // -------------------------------------------------------------------------- + // + CSpdiaNoteDialog* CSpdiaContainer::GetViewDialogStatus() + { + return iDialog; + } // End of File diff -r 0d28c1c5b6dd -r 2828b4d142c0 phonebookui/Speeddial/src/SpdiaView.cpp --- a/phonebookui/Speeddial/src/SpdiaView.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/phonebookui/Speeddial/src/SpdiaView.cpp Tue May 11 16:00:21 2010 +0300 @@ -457,6 +457,14 @@ LoadCba( iContainer->MenuResourceID() ); iAIWRunFlag = EFalse; + + // If the view note displays when switching speeddial to background. + // Making the note pops up again. + if ( iSpeedPrivate->UpdateFlag() && iContainer->GetViewDialogStatus() ) + { + CmdViewNumberL(); + iSpeedPrivate->SetUpdateFlag( EFalse ); + } } else { diff -r 0d28c1c5b6dd -r 2828b4d142c0 predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsAlgorithm1MultiSearchHelper.cpp --- a/predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsAlgorithm1MultiSearchHelper.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsAlgorithm1MultiSearchHelper.cpp Tue May 11 16:00:21 2010 +0300 @@ -410,6 +410,7 @@ { PRINT ( _L("Enter CPcsAlgorithm1MultiSearchHelper::ConvertQueryToListL") ); + CleanupResetAndDestroyPushL( aQueryList ); for ( TInt queryIndex = 0; queryIndex < aSearchQuery.Count(); queryIndex++ ) { TBuf dataWithKeys; @@ -419,7 +420,8 @@ aQueryList.AppendL( dWKToAppend ); CleanupStack::Pop( dWKToAppend ); // ownership transfered } - + + CleanupStack::Pop( &aQueryList ); PRINT ( _L("End CPcsAlgorithm1MultiSearchHelper::ConvertQueryToListL") ); } diff -r 0d28c1c5b6dd -r 2828b4d142c0 predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsAlgorithm1Utils.cpp --- a/predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsAlgorithm1Utils.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsAlgorithm1Utils.cpp Tue May 11 16:00:21 2010 +0300 @@ -41,6 +41,7 @@ void CPcsAlgorithm1Utils::FormCompleteSearchResultsL(RPointerArray& aSearchResultsArr, RPointerArray& aSearchResults) { + CleanupClosePushL( aSearchResults ); TInt maxIndex = 0; TInt maxValue = aSearchResultsArr[maxIndex]->Count(); TLinearOrder rule( CPcsAlgorithm1Utils::CompareDataBySortOrderL ); @@ -74,6 +75,7 @@ } } } + CleanupStack::Pop(); } // ---------------------------------------------------------------------------- @@ -330,6 +332,8 @@ void CPcsAlgorithm1Utils::AppendMatchToSeqL( RPointerArray& aMatchSeq, const TDesC& aMatch ) { + CleanupResetAndDestroyPushL( aMatchSeq ); + HBufC* seq = aMatch.AllocLC(); seq->Des().UpperCase(); TIdentityRelation rule(CompareExact); @@ -342,6 +346,7 @@ { CleanupStack::PopAndDestroy( seq ); } + CleanupStack::Pop( &aMatchSeq ); } // End of File diff -r 0d28c1c5b6dd -r 2828b4d142c0 predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsCache.cpp --- a/predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsCache.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/predictivesearch/PcsAlgorithm/Algorithm1/src/CPcsCache.cpp Tue May 11 16:00:21 2010 +0300 @@ -120,7 +120,7 @@ void CPcsCache::GetContactsForKeyL(TInt aKeyId, RPointerArray& aData) { PRINT ( _L("Enter CPcsCache::GetContactsForKeyL") ); - + CleanupClosePushL( aData ); if ( aKeyId >= 0 && aKeyId < iKeyArr.Count() ) { const RPointerArray& arr = *iKeyArr[aKeyId]; @@ -129,7 +129,7 @@ aData.AppendL(arr[i]); } } - + CleanupStack::Pop(); PRINT ( _L("End CPcsCache::GetContactsForKeyL") ); } @@ -140,12 +140,12 @@ void CPcsCache::GetAllContentsL(RPointerArray& aData) { PRINT ( _L("Enter CPcsCache::GetAllContentsL") ); - + CleanupClosePushL( aData ); for ( TInt i = 0; i < iMasterPool.Count(); i++ ) { aData.AppendL(iMasterPool[i]); } - + CleanupStack::Pop(); PRINT ( _L("End CPcsCache::GetAllContentsL") ); } diff -r 0d28c1c5b6dd -r 2828b4d142c0 predictivesearch/PcsAlgorithm/Algorithm2/src/CPcsAlgorithm2MultiSearchHelper.cpp --- a/predictivesearch/PcsAlgorithm/Algorithm2/src/CPcsAlgorithm2MultiSearchHelper.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/predictivesearch/PcsAlgorithm/Algorithm2/src/CPcsAlgorithm2MultiSearchHelper.cpp Tue May 11 16:00:21 2010 +0300 @@ -224,6 +224,9 @@ RArray& aMatchLocation) { PRINT ( _L("Enter CPcsAlgorithm2MultiSearchHelper::SearchMatchSeqMultiL") ); + CleanupResetAndDestroyPushL( aMatchSet ); + CleanupClosePushL( aMatchLocation ); + RPointerArray queryList; ConvertQueryToListL(aPsQuery, queryList); @@ -350,6 +353,9 @@ // Free the query list queryList.ResetAndDestroy(); tempqueryList.Reset(); + + CleanupStack::Pop(); + CleanupStack::Pop( &aMatchSet ); PRINT ( _L("End CPcsAlgorithm2MultiSearchHelper::SearchMatchSeqMultiL") ); } diff -r 0d28c1c5b6dd -r 2828b4d142c0 predictivesearch/PcsAlgorithm/Algorithm2/src/CPcsAlgorithm2Utils.cpp --- a/predictivesearch/PcsAlgorithm/Algorithm2/src/CPcsAlgorithm2Utils.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/predictivesearch/PcsAlgorithm/Algorithm2/src/CPcsAlgorithm2Utils.cpp Tue May 11 16:00:21 2010 +0300 @@ -35,6 +35,8 @@ void CPcsAlgorithm2Utils::FormCompleteSearchResultsL(RPointerArray& aSearchResultsArr, RPointerArray& SearchResults) { + CleanupClosePushL( SearchResults ); + TInt maxIndex = 0; TInt maxValue = aSearchResultsArr[maxIndex]->Count(); TLinearOrder rule(CPcsAlgorithm2Utils::CompareDataBySortOrder); @@ -68,6 +70,7 @@ } } } + CleanupStack::Pop(); } // ---------------------------------------------------------------------------- diff -r 0d28c1c5b6dd -r 2828b4d142c0 predictivesearch/PcsAlgorithm/Algorithm2/src/CPcsCache.cpp --- a/predictivesearch/PcsAlgorithm/Algorithm2/src/CPcsCache.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/predictivesearch/PcsAlgorithm/Algorithm2/src/CPcsCache.cpp Tue May 11 16:00:21 2010 +0300 @@ -191,7 +191,7 @@ void CPcsCache::GetContactsForKeyL(TInt aKeyId, RPointerArray& aData) { PRINT ( _L("Enter CPcsCache::GetContactsForKeyL") ); - + CleanupClosePushL( aData ); RPointerArray arr = *keyArr[aKeyId]; for (int i = 0; i < arr.Count(); i++) { @@ -199,6 +199,7 @@ aData.AppendL(value); } + CleanupStack::Pop(); PRINT ( _L("End CPcsCache::GetContactsForKeyL") ); } @@ -209,13 +210,13 @@ void CPcsCache::GetAllContentsL(RPointerArray& aData) { PRINT ( _L("Enter CPcsCache::GetAllContentsL") ); - + CleanupClosePushL( aData ); for (int i = 0; i < masterPool.Count(); i++) { CPsData* value = masterPool[i]; aData.AppendL(value); } - + CleanupStack::Pop(); PRINT ( _L("End CPcsCache::GetAllContentsL") ); } diff -r 0d28c1c5b6dd -r 2828b4d142c0 predictivesearch/PcsAlgorithm/Algorithm2/src/FindUtilChineseECE.cpp --- a/predictivesearch/PcsAlgorithm/Algorithm2/src/FindUtilChineseECE.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/predictivesearch/PcsAlgorithm/Algorithm2/src/FindUtilChineseECE.cpp Tue May 11 16:00:21 2010 +0300 @@ -70,6 +70,28 @@ _LIT(KPanicReason, "Abnormal input parameters!"); const TInt KLitLineFeed(8233); + +// CleanupStack helpers for item owning RPointerArrays +template +class CleanupResetAndDestroy + { +public: + inline static void PushL( T& aRef ) + { + CleanupStack::PushL( TCleanupItem( &ResetAndDestroy, &aRef ) ); + } +private: + inline static void ResetAndDestroy( TAny *aPtr ) + { + static_cast( aPtr )->ResetAndDestroy(); + } + }; + +template +inline void CleanupResetAndDestroyPushL( T& aRef ) + { + CleanupResetAndDestroy::PushL( aRef ); + } // ======== MEMBER FUNCTIONS ======== // --------------------------------------------------------- @@ -1055,6 +1077,7 @@ void CFindUtilChineseECE::InsertStrInforArrayL(RPointerArray& aStringInfoArr, TDes &aSegmentStr, const TBool aChinese) { + CleanupResetAndDestroyPushL( aStringInfoArr ); if (aSegmentStr.Length() <= 0) { return; @@ -1069,6 +1092,7 @@ aStringInfoArr.AppendL(strInfo); aSegmentStr.Zero(); + CleanupStack::Pop( &aStringInfoArr ); } // --------------------------------------------------------- diff -r 0d28c1c5b6dd -r 2828b4d142c0 predictivesearch/PcsServer/group/PcsServer.mmp --- a/predictivesearch/PcsServer/group/PcsServer.mmp Tue Apr 27 16:23:35 2010 +0300 +++ b/predictivesearch/PcsServer/group/PcsServer.mmp Tue May 11 16:00:21 2010 +0300 @@ -25,6 +25,7 @@ SECUREID 0x2000B5B6 EPOCHEAPSIZE 0x100000 0x1000000 +EPOCPROCESSPRIORITY background SOURCEPATH ../src SOURCE CPcsStartup.cpp diff -r 0d28c1c5b6dd -r 2828b4d142c0 predictivesearch/adapters/contacts/src/cpcscontactstore.cpp --- a/predictivesearch/adapters/contacts/src/cpcscontactstore.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/predictivesearch/adapters/contacts/src/cpcscontactstore.cpp Tue May 11 16:00:21 2010 +0300 @@ -60,11 +60,13 @@ #include // CONSTANTS +namespace { const TInt KSimStoreOffset = -5000; +const TInt KTimerInterval = 100000; // 100 milliseconds _LIT(KResourceFileName, "contactsort.rsc"); _LIT(KPcsViewPrefix,"PCSView_"); - +} // FORWARD DECLARATION // ============================== MEMBER FUNCTIONS ================================ @@ -318,7 +320,10 @@ { // Fetch next block iNextState = EFetchContactBlock; - IssueRequest(); + // Delay the next fetch since contact fetch is CPU intensive, + // this will give other threads a chance to use CPU + iTimer.After( iStatus, KTimerInterval); // 100 milliseconds + SetActive(); } } @@ -344,7 +349,10 @@ { // Fetch next block iNextState = EFetchContactBlock; - IssueRequest(); + // Delay the next fetch since contact fetch is CPU intensive, + // this will give other threads a chance to use CPU + iTimer.After( iStatus, KTimerInterval); // 100 milliseconds + SetActive(); } PRINT ( _L("End CPcsContactStore::VPbkSingleContactOperationFailed") ); @@ -815,11 +823,6 @@ case EFetchContactBlock: PRINT ( _L("Issuing the fetch request for next block") ); FetchlinksL(); - - // Delay the next fetch since contact fetch is CPU intensive, - // this will give other threads a chance to use CPU - iTimer.After( timerStatus, 100000); // 100 milliseconds - User::WaitForRequest( timerStatus ); break; case EComplete: diff -r 0d28c1c5b6dd -r 2828b4d142c0 presencecache/presencecacheutils/inc/presenceobjecthelpers.h --- a/presencecache/presencecacheutils/inc/presenceobjecthelpers.h Tue Apr 27 16:23:35 2010 +0300 +++ b/presencecache/presencecacheutils/inc/presenceobjecthelpers.h Tue May 11 16:00:21 2010 +0300 @@ -61,4 +61,19 @@ ~PresenceCacheBuddyUtils(); }; +// CleanupStack helpers for item owning RPointerArrays +template +class CleanupResetAndDestroy + { +public: + inline static void PushL(T& aRef) + { CleanupStack::PushL(TCleanupItem(&ResetAndDestroy,&aRef)); } +private: + inline static void ResetAndDestroy(TAny *aPtr) + { static_cast(aPtr)->ResetAndDestroy(); } + }; + +template +inline void CleanupResetAndDestroyPushL(T& aRef) + { CleanupResetAndDestroy::PushL(aRef); } #endif // PRESENCEOBJECTHELPERS_H diff -r 0d28c1c5b6dd -r 2828b4d142c0 presencecache/presencecacheutils/src/presenceobjecthelpers.cpp --- a/presencecache/presencecacheutils/src/presenceobjecthelpers.cpp Tue Apr 27 16:23:35 2010 +0300 +++ b/presencecache/presencecacheutils/src/presenceobjecthelpers.cpp Tue May 11 16:00:21 2010 +0300 @@ -64,6 +64,7 @@ // EXPORT_C void TPresenceArrayPacker::UnPackArrayL( RPointerArray< MPresenceBuddyInfo2 >& aBufferArray, const TDesC8& aPack ) { + CleanupResetAndDestroyPushL( aBufferArray ); // No reset if ( ! aPack.Length() ) { @@ -85,10 +86,10 @@ info = MPresenceBuddyInfo2::NewLC(); info->InternalizeL( rs ); aBufferArray.AppendL( info ); - + CleanupStack::Pop(); } - CleanupStack::Pop( objCount ); // all the objects CleanupStack::PopAndDestroy(); // rs + CleanupStack::Pop( &aBufferArray ); }