diff -r 000000000000 -r e686773b3f54 phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/inc/ccappcommlauncherlpadmodel.h --- /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 +#include "ccalogger.h" +#include +#include +#include +#include + + +_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 iText; + TInt iNumberOfAddresses; + TInt iFlags; + TBuf 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 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 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