phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/inc/ccappcommlauncherlpadmodel.h
changeset 0 e686773b3f54
child 3 04ab22b956c2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/inc/ccappcommlauncherlpadmodel.h	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,489 @@
+/*
+* Copyright (c) 2008 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:  Class for handlind the launchpad related data
+*
+*/
+
+
+#ifndef __CCAPPCOMMLAUNCHERLPADMODEL_H__
+#define __CCAPPCOMMLAUNCHERLPADMODEL_H__
+
+#include <e32base.h>
+#include "ccalogger.h"
+#include <e32hashtab.h>
+#include <spdefinitions.h>
+#include <mspnotifychangeobserver.h>
+#include <vpbkfieldtype.hrh>
+
+
+_LIT( KPbk2ECEIconFileName, "\\resource\\apps\\phonebook2ece.mif");
+
+class CCCAppCommLauncherContainer;
+class CAknIconArray;
+class CCoeEnv;
+class CFbsBitmap;
+class CCCAppCommLauncherPlugin;
+class CCCAppCommLauncherPbkCmd;
+class CSPSettings;
+class CSPNotifyChange;
+
+const TInt KCCAppCommLauncherMaxButtonDataTextLength = 150;
+
+enum TCCAppCommLauncherAddressFields
+	{
+	EAddressPO,
+	EAddressExt,
+	EAddressStreet,
+	EAddressLocal,
+	EAddressRegion,
+	EAddressPostcode,
+	EAddressCountry
+	};
+
+/**
+ *  Small utility class for launchpad data storage
+ *
+ *  @code
+ *   ?good_class_usage_example(s)
+ *  @endcode
+ *
+ *  @lib ccaappcommlauncher.dll
+ *  @since S60 v5.0
+ */
+class TCommLauncherButtonData
+	{
+public:
+    TCommLauncherButtonData( VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aContactAction ):
+        iContactAction( aContactAction ),
+        iNumberOfAddresses(0),
+        iFlags(0),
+        iClipFromBegining(EFalse){};
+
+	enum TFlags
+	    {
+	    EDefaultSet = 1
+	    };
+
+	VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector iContactAction;
+	TBuf<KCCAppCommLauncherMaxButtonDataTextLength> iText;	
+	TInt iNumberOfAddresses;
+	TInt iFlags;
+	TBuf<KCCAppCommLauncherMaxButtonDataTextLength> iPopupText;
+	TBool iClipFromBegining;
+	};
+
+/**
+ *  Class for handlind the launchpad related data
+ *
+ *  @code
+ *   ?good_class_usage_example(s)
+ *  @endcode
+ *
+ *  @lib ccaappcommlauncher.dll
+ *  @since S60 v5.0
+ */
+class CCCAppCommLauncherLPadModel : 
+    public CBase,
+    public MDesCArray,
+    public MSPNotifyChangeObserver
+{
+public:
+
+    /**
+     * Two phased constructor.
+     */
+    static CCCAppCommLauncherLPadModel* NewL( 
+        CCCAppCommLauncherContainer& aContainer, CEikListBox& aListBox, CCCAppCommLauncherPlugin& aPlugin );
+
+    /**
+     * Destructor.
+     */
+    ~CCCAppCommLauncherLPadModel();
+
+    /**
+     * See more details from MDesCArray.
+     *
+     * @since S60 v5.0
+     */
+    TInt MdcaCount() const;
+	
+protected:
+
+    /**
+     * See more details from MDesCArray.
+     *
+     * @since S60 v5.0
+     */
+    TPtrC MdcaPoint(TInt aIndex) const;
+
+public: // New
+
+    /**
+     * Fills the communication button related data based on
+     * CCmsContactFieldInfo. Initial layout is created based
+     * on this.
+     *
+     * @since S60 v5.0
+     */
+    void FillButtonArrayL();
+
+    /**
+     * Loads all the icons needed for listbox.
+     *
+     * @since S60 v5.0
+     */
+    void LoadIconArrayL();
+
+    /**
+     * Loads one particular icon.
+     *
+     * @since S60 v5.0
+     * @param aBmpId for the icon
+     * @param aBmpId for the icon mask
+     */
+    CGulIcon* LoadIconLC( TInt aBmpId, TInt aMaskId );
+
+    /**
+     * Mapping of icons in iButtonIconArray.
+     *
+     * @since S60 v5.0
+     */    
+    enum TIconIndex
+        {
+        ECallIconIndex,
+        EMsgIconIndex,
+        EEmailIconIndex,
+        EVoipIconIndex,
+        EInstMsgIconIndex,
+        EUrlIconIndex,
+        EVideocallIconIndex,
+        EAddressValIconIndex,
+        EAddressNotValIconIndex,
+        EMultiIconIndex
+        };
+
+    /**
+     * Getter for icon array.
+     *
+     * @since S60 v5.0
+     * @return CAknIconArray containing the icons
+     */
+    CAknIconArray* IconArray();
+
+    /**
+     * Getter for TCommLauncherButtonData
+     *
+     * @since S60 v5.0
+     * @param Index of wanted buttondata
+     * @return TCommLauncherButtonData
+     */
+    TCommLauncherButtonData& ButtonData( TInt aIndex );
+
+    /**
+     * Similar as in MCCAppContactHandlerNotifier, but this is
+     * forwarded by container-class.
+     *
+     * @since S60 v5.0
+     * @param aContactField
+     */
+    void ContactFieldFetchedNotifyL( 
+        const CCmsContactField& aContactField );    
+
+    /**
+     * Getter for popup-texts
+     *
+     * @since S60 v5.0
+     * @param aButtonIndex
+     * @return descriptor containing text to be shown
+     */
+    TPtrC TextForPopUpL( TInt aButtonIndex );
+    
+    /**
+     * Returns address information for popup-texts
+     *
+     * @param aButtonIndex
+     * @return descriptor containing text to be shown
+     */
+    TPtrC AddressTextForPopUpL();
+
+    /**
+     * Resets the model, does not unload icons
+     *
+     * @since S60 v5.0
+     */
+    void Reset();
+    
+    /**
+     * Notifies of presence change
+     * 
+     * @param aContactField
+     */
+    void ContactPresenceChangedL( const CCmsContactField& aContactField );
+
+    /**
+     * Updates information if addresses are validated
+     *
+     * @param aContactFieldInfo 
+     */    
+    void UpdateAddressesValidationL( const CCmsContactFieldInfo& aContactFieldInfo );
+   
+
+private: // New
+
+    /**
+     * Maps communication methods to icons in launchpad-listbox.
+     *
+     * @since S60 v5.0
+     * @param aContactAction communication method
+     * @return icon array index of the icon 
+     */
+    TInt MapCommMethodToIcon( 
+        VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aContactAction ) const;
+
+    /**
+     * Updates button's popup text
+     *
+     * @since S60 v5.0
+     * @param aButtonIndex
+     * @param aContactAction communication method
+     * @param aContactField method
+     */
+    void CheckPopupTextL(
+        const TInt aButtonIndex,
+        const VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aContactAction, 
+        const CCmsContactField& aContactField );
+
+    /**
+     * Getter for button label text
+     *
+     * @since S60 v5.0
+     * @param aContactAction communication method
+     * @param aText descriptor the text will be copied to, needs size of at least KCCAppCommLauncherMaxButtonDataTextLength
+     */    
+    void ButtonTextL( 
+        VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aContactAction, 
+        TDes& aText );
+
+    /**
+     * Replace the bitmap with original default bitmap. Supports only
+     * ECmsPresenceVoIPNotification and ECmsPresenceChatNotification.
+     * Will leave with KErrArgument if tried with other type.
+     *
+     * @since S60 v5.0
+     * @param aBitmap, aMask bitmaps to be replaced
+     * @param aServiceType service type identifying the bitmap
+     */     
+    void ReplaceWithDefaultIconL(
+        CFbsBitmap*& aBitmap,
+        CFbsBitmap*& aMask,
+        const TUint32 aServiceType );
+
+    /**
+     * Draws find/show on map button
+     *
+     * @param aNumberOfAddresses number of addresses
+     * @param aIndex communication method index 
+     */    
+    void AddressButtonL( const TInt aNumberOfAddresses, const TInt aIndex );
+
+    /**
+     * Updates addresses button popup text
+     *
+     * @since S60 v5.0
+     * @param aButtonIndex
+     * @param aContactAction communication method
+     * @param aContactField method
+     */
+    void CheckAddressesPopupTextL(
+        const TInt aButtonIndex,
+        const VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aContactAction, 
+        const CCmsContactField& aContactField );
+
+private:
+
+    /**
+     * Private constructor
+     */    
+    CCCAppCommLauncherLPadModel( CCCAppCommLauncherContainer& aContainer,
+    		CEikListBox& aListBox, 
+            CCCAppCommLauncherPlugin& aPlugin );
+
+    /**
+     * ConstructL
+     */    
+    void ConstructL();        
+    
+    /**
+     * Loads the VOIP Button Icon & Label 
+     * Usecase : If we have only one voip service, the voip(Internet Call)
+     * button should have the Branded Icon of that Service and the label
+     * must be "ServiceName" appended with "Call".
+     * eg : If we have a service named SKYPE installed in the Phone
+     * and if SKYPE supports VOIP, then the VOIP Button Icon should be
+     * the Branded Icon of SKYPE and the Button Label should be
+     * "SKYPE CALL". 
+     * @return TInt - Stores the Info regd whether Image/Text was set for the
+     *          VOIP Buttton or not. We use KVOIPButtonImageSet && with the returnval
+     *          to know whether Image has been set or not
+     *          Will be used in   HandleNotifyChange
+     */
+    TInt LoadVoipButtonInfoL();
+    
+    /**
+     * Finds the number of services that support internet call 
+     * by scanning all the services in the SPSettings Table.
+     * @param aServiceId - Stores the last matched service id    
+     * @return - Total Number of services on which Internet call is possible
+     */ 
+    TInt GetSupportedVOIPServicesL( TServiceId& aServiceId );    
+    
+    /**
+     * Loads the Branded VOIP icon & Localised ServiceName
+     * from PBK2 service manager interface     
+     * @param aServiceId - Service Id of the Service that supports InternetCall
+     * @param aBitmap - Contains the Retreived BrandIcon Bitmap. Ownership
+     *           is passed to the caller
+     * @param aMask - Contains the Retreived BrandIcon Bitmap MAsk. Ownership
+     *           is passed to the caller
+     * @param aLocalisedServiceName - Contains the localised service name     
+     * @return None
+     */
+    void LoadVoipButtonInfoFromPbkL( 
+                TServiceId aServiceId,
+                CFbsBitmap*& aBitmap, CFbsBitmap*& aMask, HBufC*& aLocalisedServiceName );
+    
+    /**
+     * Handles SPSettings Changes
+     */            
+		void DoHandleNotifyChangeL() ;
+    
+private:
+    //From MSPNotifyChangeObserver
+    void HandleNotifyChange( TServiceId aServiceId );
+    void HandleError( TInt aError );
+    
+private: 
+	
+	/* Check if multi icon should be show
+	 * @param aButtonIndex - The button index
+	 * @return - EFalse for not show, ETrue for show the icon
+	 */
+    TBool IfShowMultiIcon(TInt aButtonIndex) const;
+    
+   
+    /* Set clip direction for label text
+     * @param aContactAction: The action type
+     * @param aCmsFieldType: Cms field type
+     * @return - none
+     */
+    void SetTextClipDirection( 
+    		VPbkFieldTypeSelectorFactory::TVPbkContactActionTypeSelector aContactAction,
+    		TInt aButtonIndex
+    		/*CCmsContactFieldItem::TCmsContactField aCmsFieldType*/ );
+    
+    /* Clip the text from begining
+     * @param aBuffer
+     * @param aItemIndex
+     * @param aSubCellNumber
+     * @return - the result of clipping
+     */
+    TBool ClipFromBeginning(
+        TDes& aBuffer,
+        TInt aItemIndex,
+        TInt aSubCellNumber) const;
+
+private: // Data
+
+    /**
+     * Array of button data
+     * Own.
+     */
+    RArray<TCommLauncherButtonData> iButtonDataArray;
+    /**
+     * Array of icons used in listbox
+     * Own.
+     */
+    CAknIconArray* iButtonIconArray;
+    /**
+     * For storing the texts
+     * Own.
+     */   
+    HBufC* iTempText;
+    /**
+     * Ref to container class
+     * Not own.
+     */   
+    CCCAppCommLauncherContainer& iContainer;
+    /**
+     * Addresses validation status
+     * Own.
+     */   
+    TBool iAddressesValidated;
+    /**
+     * For storing the address text
+     * Own.
+     */   
+    RHashMap<TInt, TPtrC> iAddressFields;
+
+    /**
+     * Launching performance logger
+     * Will be removed (hopefully) when launching performance is sufficient.
+     */        
+    TBool iPerfLauncherCalled;
+
+    /**
+     * Environment.
+     * Not Own.
+     */
+    CCoeEnv& iCoeEnv;
+    
+    /*
+     * Reference to list box control
+     */
+    CEikListBox& iListBox;
+
+    /**
+     * Ref to plugin.
+     * Not own.
+     */
+    CCCAppCommLauncherPlugin& iPlugin;
+    
+    /// Own: CCCAppCommLauncherPbkCmd
+    // used to get the instance of the Phonebook 2 application services.
+    CCCAppCommLauncherPbkCmd* iPbkCmd;
+
+    //Owns - Instance to spSettings    
+    CSPSettings* iSettings;
+    
+    //Owns - Service provider settings change notifer
+    CSPNotifyChange* iSPNotifyChange;
+    
+    HBufC* iTextBuf;     
+        
+    inline void RunLaunchLogger()
+        {
+        #ifdef PERF_LAUNCH
+        if(!iPerfLauncherCalled)
+            {
+            WriteToPerfLaunchLog(_L(" Ready"));
+            iPerfLauncherCalled = ETrue; 
+            }
+        #endif // PERF_LAUNCH
+        }
+};
+
+
+    
+#endif // __CCAPPCOMMLAUNCHERLPADMODEL_H__
+//End of file