diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/inc/ccappcommlaunchercontacthandler.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/inc/ccappcommlaunchercontacthandler.h Tue Feb 02 10:12:17 2010 +0200 @@ -0,0 +1,468 @@ +/* +* Copyright (c) 2007-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: Contact handling wrapper +* +*/ + + +#ifndef C_CCAPPCOMMLAUNCHERCONTACTHANDLER_H +#define C_CCAPPCOMMLAUNCHERCONTACTHANDLER_H + +// INCLUDES +#include "ccappcommlauncherheaders.h" +#include + +class CCCAppCommLauncherPlugin; +class CCCAParameter; +class CCmsContactFieldInfo; +class CCCAppCommLauncherView; +class MCCAppContactFieldDataObserver; + +/* + * Small macro to ease up counting of array sizes below + */ +#define CCACOMMLAUNCHER_ROMARRAY_SIZE( aRomArray ) \ + ( sizeof( aRomArray ) / sizeof(( aRomArray )[0] )) + +/* + * Defines the addresses used for voice calls. + * (todo; should be dynamically loaded from pbk selector resources to CMS + * and handled by CMS CCmsContactField::GroupType() -functionality ) + * */ +const TInt KCCAppCommLauncherVoiceCallGroup[] = { + CCmsContactFieldItem::ECmsMobilePhoneGeneric, + CCmsContactFieldItem::ECmsMobilePhoneHome, + CCmsContactFieldItem::ECmsMobilePhoneWork, + CCmsContactFieldItem::ECmsLandPhoneGeneric, + CCmsContactFieldItem::ECmsLandPhoneHome, + CCmsContactFieldItem::ECmsLandPhoneWork, + CCmsContactFieldItem::ECmsPagerNumber, + CCmsContactFieldItem::ECmsAssistantNumber, + CCmsContactFieldItem::ECmsCarPhone }; + +/* + * Defines the addresses used for messaging. + * (todo; should be dynamically loaded from pbk selector resources to CMS + * and handled by CMS CCmsContactField::GroupType() -functionality ) + * */ +const TInt KCCAppCommLauncherMessageEmailGroup[] = { + CCmsContactFieldItem::ECmsMobilePhoneGeneric, + CCmsContactFieldItem::ECmsMobilePhoneHome, + CCmsContactFieldItem::ECmsMobilePhoneWork, + CCmsContactFieldItem::ECmsLandPhoneGeneric, + CCmsContactFieldItem::ECmsLandPhoneHome, + CCmsContactFieldItem::ECmsLandPhoneWork, + //CCmsContactFieldItem::ECmsAssistantNumber, + //CCmsContactFieldItem::ECmsCarPhone, + CCmsContactFieldItem::ECmsEmailGeneric, + CCmsContactFieldItem::ECmsEmailHome, + CCmsContactFieldItem::ECmsEmailWork }; + +const TInt KCCAppCommLauncherMessageGroup[] = { + CCmsContactFieldItem::ECmsMobilePhoneGeneric, + CCmsContactFieldItem::ECmsMobilePhoneHome, + CCmsContactFieldItem::ECmsMobilePhoneWork, + CCmsContactFieldItem::ECmsLandPhoneGeneric, + CCmsContactFieldItem::ECmsLandPhoneHome, + CCmsContactFieldItem::ECmsLandPhoneWork}; + +/* + * Defines the addresses used for emailing. + * (todo; should be dynamically loaded from pbk selector resources to CMS + * and handled by CMS CCmsContactField::GroupType() -functionality ) + * */ +const TInt KCCAppCommLauncherEmailGroup[] = { + CCmsContactFieldItem::ECmsEmailGeneric, + CCmsContactFieldItem::ECmsEmailHome, + CCmsContactFieldItem::ECmsEmailWork }; + +/* + * Defines the addresses used for chatting. + * (todo; should be dynamically loaded from pbk selector resources to CMS + * and handled by CMS CCmsContactField::GroupType() -functionality ) + * */ +const TInt KCCAppCommLauncherChatGroup[] = { + CCmsContactFieldItem::ECmsImpp }; + +/* + * Defines the addresses used for browsing. + * (todo; should be dynamically loaded from pbk selector resources to CMS + * and handled by CMS CCmsContactField::GroupType() -functionality ) + * */ +const TInt KCCAppCommLauncherUrlGroup[] = { + CCmsContactFieldItem::ECmsUrlGeneric, + CCmsContactFieldItem::ECmsUrlHome, + CCmsContactFieldItem::ECmsUrlWork }; + +/* + * Defines the addresses used for video calls. + * (todo; should be dynamically loaded from pbk selector resources to CMS + * and handled by CMS CCmsContactField::GroupType() -functionality ) + * */ +const TInt KCCAppCommLauncherVideoCallGroup[] = { + CCmsContactFieldItem::ECmsMobilePhoneGeneric, + CCmsContactFieldItem::ECmsMobilePhoneHome, + CCmsContactFieldItem::ECmsMobilePhoneWork, + CCmsContactFieldItem::ECmsVideoNumberGeneric, + CCmsContactFieldItem::ECmsVideoNumberHome, + CCmsContactFieldItem::ECmsVideoNumberWork }; + +/* + * Defines the addresses used for find/show on map. + * (todo; should be dynamically loaded from pbk selector resources to CMS + * and handled by CMS CCmsContactField::GroupType() -functionality ) + * */ +const TInt KCCAppCommLauncherAddressGroup[] = { + CCmsContactFieldItem::ECmsAddrStreetGeneric, + CCmsContactFieldItem::ECmsAddrLocalGeneric, + CCmsContactFieldItem::ECmsAddrCountryGeneric, + CCmsContactFieldItem::ECmsAddrPostcodeGeneric, + CCmsContactFieldItem::ECmsAddrPOGeneric, + CCmsContactFieldItem::ECmsAddrExtGeneric, + CCmsContactFieldItem::ECmsAddrRegionGeneric, + CCmsContactFieldItem::ECmsAddrStreetHome, + CCmsContactFieldItem::ECmsAddrLocalHome, + CCmsContactFieldItem::ECmsAddrCountryHome, + CCmsContactFieldItem::ECmsAddrPostcodeHome, + CCmsContactFieldItem::ECmsAddrPOHome, + CCmsContactFieldItem::ECmsAddrExtHome, + CCmsContactFieldItem::ECmsAddrRegionHome, + CCmsContactFieldItem::ECmsAddrStreetWork, + CCmsContactFieldItem::ECmsAddrLocalWork, + CCmsContactFieldItem::ECmsAddrCountryWork, + CCmsContactFieldItem::ECmsAddrPostcodeWork, + CCmsContactFieldItem::ECmsAddrPOWork, + CCmsContactFieldItem::ECmsAddrExtWork, + CCmsContactFieldItem::ECmsAddrRegionWork }; + + +/** + * Interface-class for contact data notifications + * + * @code + * ?good_class_usage_example(s) + * @endcode + * + * @lib ccappcommlauncherplugin.dll + * @since S60 v5.0 + */ +class MCCAppContactHandlerNotifier + { +public: + + /** + * Notifies observer when CCmsContactFieldInfo is available. + * Ownership not transferred. + * + * @param CCmsContactFieldInfo + */ + virtual void ContactInfoFetchedNotifyL( + const CCmsContactFieldInfo& aContactFieldInfo ) = 0; + + /** + * Notifies observer when new CCmsContactField is available. + * Ownership not transferred. + * + * @param CCmsContactField + */ + virtual void ContactFieldFetchedNotifyL( + const CCmsContactField& aContactField ) = 0; + + /** + * Notifies observer when all the contact fields have been fetched + * + * @param CCmsContactField + */ + virtual void ContactFieldFetchingCompletedL() = 0; + + /** + * Notifies observer that contact data has been changed and will be reloaded + */ + virtual void ContactsChangedL() = 0; + + /** + * Notifies observer that contact presence has changed + * + * @param CCmsContactField + */ + virtual void ContactPresenceChangedL( const CCmsContactField& aContactField) = 0; + }; + +/** + * This class encapsulates the contact handling functionality through CCAPP/CMS. + * + * @code + * ?good_class_usage_example(s) + * @endcode + * + * @lib ccappcommlauncherplugin.dll + * @since S60 v5.0 + */ +class CCCAppCommLauncherContactHandler : + public CBase, + public MCCAppContactFieldDataObserver + { +#ifdef __COMMLAUNCHERPLUGINUNITTESTMODE + friend class T_CCCAppCommLauncherContactHandler; +#endif// __COMMLAUNCHERPLUGINUNITTESTMODE + +public: // Construction and destruction + + /** + * Creates a new instance of this class. + * + * @return pointer to a new instance of this clas. + * @param pointer to target the contact data + * @param aPlugin reference + */ + static CCCAppCommLauncherContactHandler* NewL( + MCCAppContactHandlerNotifier& aObserver, + CCCAppCommLauncherPlugin& aPlugin ); + + /** + * Destructor. + */ + ~CCCAppCommLauncherContactHandler(); + +public: //new + + /** + * Request current and coming data from CMS wrapper + * + * @since S60 v5.0 + */ + void RequestContactDataL(); + + /** + * Returns amount of address fields in a contact + * + * @since S60 v5.0 + * @param aContactAction defining the address type + * @return amount of suitable addresses + */ + TInt AddressAmount( + VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aContactAction ); + + /** + * Checks if there is a service available for the contact method + * + * @since S60 v5.0 + * @param aContactAction defining the address type + * @return TInt 1 if there is a service available, 0 otherwise. Voip is + * a special case having more levels than just on/off. + */ + TInt IsServiceAvailable( + VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aContactAction ); + + /** + * Check from which store this contact is from + * + * @return store type containing this contact + */ + TCmsContactStore ContactStore() const; + + /** + * Returns contact field array. + * + * @since S60 v5.0 + */ + RPointerArray& ContactFieldDataArray(); + + /** + * Returns packed contact identifiers + * + * @since S60 v5.0 + */ + HBufC8* ContactIdentifierLC(); + + /** + * Find out is there default attributes set to this communication method. + * Maps communication methods with default already fetched default + * attributes. + * + * @since S60 v5.0 + * @param aContactAction communication method + * @return TBool + */ + TBool HasDefaultAttribute( + VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aContactAction ); + + /** + * Maps between different communication methods and CMS default fields + * + * @since S60 v5.0 + * @param aContactAction communication method + * @return CMS default type + */ + CCmsContactFieldItem::TCmsDefaultAttributeTypes MapContactorTypeToCMSDefaultType( + VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aContactAction ); + + /** + * Returns data of 1st index as descriptor if found, otherwise KNullDesC. + * + * @since S60 v5.0 + * @param aFieldType type of the field + * @param aData of field as descriptor + */ + void ContactFieldItemDataL( + const CCmsContactFieldItem::TCmsContactField aFieldType, + TPtrC& aData ); + + /** + * Checks if the contact field is among the fields of certain selector + * + * @since S60 v5.0 + * @param aContactField contact field to be matched + * @param aContactAction defines set of selector fields + * @return ETrue if contact field is among the fields of certain selector + */ + TBool ContactFieldTypeAndContactActionMatch( + CCmsContactFieldItem::TCmsContactField aContactField, + VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aContactAction ); + + /** + * Checks if the address is thought as number or address + * + * @since S60 v5.0 + * @param aContactAction to be checked + * @return ETrue if address is thought to be number address + */ + TBool IsItNumberAddress( + VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aContactAction ); + + /** + * Refetches a new contact from a store + * + * @since S60 v5.0 + */ + void RefetchContactL(); + +private: // from MCCAppContactFieldDataObserver + + /** + * from MCCAppContactFieldDataObserver + */ + void ContactFieldDataObserverNotifyL( + MCCAppContactFieldDataObserver::TParameter& aParameter ); + + /** + * from MCCAppContactFieldDataObserver + */ + void ContactFieldDataObserverHandleErrorL( + TInt aState, TInt aError ); + +private:// new + + /** + * ContactInfo -notifies are handled through this. + * See ContactFieldDataObserverNotifyL. + * + * @since S60 v5.0 + */ + void ContactInfoFetchedNotifyL( + const CCmsContactFieldInfo& aContactFieldInfo ); + + /** + * ContactField -notifies are handled through this. + * See ContactFieldDataObserverNotifyL. + * + * @since S60 v5.0 + */ + void ContactFieldFetchedNotifyL( + CCmsContactField& aContactField ); + + /** + * Helper function to fetch attribute of given contact field. + * + * @since S60 v5.0 + * @param aContactField: contact field. + */ + void UpdateDefaultAttributes( const CCmsContactField& aContactField ); + + /** + * Checks if the contact field is among the fields of certain selector + * + * @since S60 v5.0 + * @param aContactField contact field to be matched + * @param aFieldArray array of fields + * @param aCount amount of the array fields + * @return ETrue if contact field is among the fields of certain selector + */ + TBool FieldArrayAndContactActionMatch( + CCmsContactFieldItem::TCmsContactField aContactField, + const TInt aFieldArray[], const TInt aCount ); + + /** + * Checks if dynamic field array is needed and creates one if it is + * + * @since S60 v5.0 + * @param aContactAction to be a array + */ + void ConstructDynamicFieldArrayIfNeeded( + VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aContactAction ); + + /** + * Creates VoIP address group + * + * @since S60 v5.0 + * @param aVoipSupportFlag defines the details of voip support + */ + void CreateDynamicVoipAddressGroup( const TInt aVoipSupportFlag ); + +private: // construction + + CCCAppCommLauncherContactHandler( + MCCAppContactHandlerNotifier& aObserver, + CCCAppCommLauncherPlugin& aPlugin ); + + void ConstructL(); + +private: // data + + /** + * Observer to be updated of contact fields + * Own. + */ + MCCAppContactHandlerNotifier& iObserver; + /** + * Dynamic address fields + * Own. + * */ + enum TDynamicAddressGroupSetFlag + { + EDynamicVoipAddressGroupSet = 1 + }; + TInt iDynamicAddressGroupSet; + RArray iDynamicVoipAddressGroup; + /** + * Default attributes as bitmasks + * Own. + */ + TInt iDefaultAttributesBitMask; + /** + * CMS is used through CmsHandler to fetch contact data fields + * Not own. + */ + CCCAppCmsContactFetcherWrapper* iCmsWrapper; + + /** + * Ref to plugin. + * Not own. + */ + CCCAppCommLauncherPlugin& iPlugin; + }; + +#endif // C_CCAPPCOMMLAUNCHERCONTACTHANDLER_H + +// End of File