phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/inc/ccappcommlaunchercontacthandler.h
changeset 0 e686773b3f54
child 5 81f8547efd4f
--- /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 <mccacontactobserver.h>
+
+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<CCmsContactField>& 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<TInt> 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