/** 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: Array Process**/#ifndef _CVIMPSTPROCESSARRAY_H#define _CVIMPSTPROCESSARRAY_H// INCLUDES#include <e32base.h>#include "mvimpstcmdhandler.h"#include "vimpstcmd.hrh"#include "mvimpststoragecontactsobserver.h"#include "mvimpstprocessarray.h"#include "tvimpstenums.h"#include "mvimpstengineimsubserviceeventobserver.h"#include "mvimpstenginepresencesubserviceeventobserver.h"#include <MVPbkStoreContact.h>// FORWARD DECLARATIONclass MVIMPSTProcessArrayItem;class MVIMPSTStorageContact;class MVIMPSTStorageContactList;class MVIMPSTStorageServiceView;class MVIMPSTProcessArrayObserver;class MVIMPSTStorageItemModel;class MVPbkContactLink;class MVPbkStoreContact;class MVIMPSTEngine;class CVIMPSTProcessFriendRequestItem;class CVIMPSTProcessUnknownContactItem;// CLASS DECLARATION/** * Array Process. * Responsible for handling all contacts array * @lib vimpstcmdprocess.dll * @since 5.0 */class CVIMPSTProcessArray : public CBase, public MVIMPSTProcessArray, public MVIMPSTStorageContactsObserver, public MVIMPSTEngineIMSubServiceEventObserver, public MVIMPSTEnginePresenceSubServiceEventObserver { friend class Cvimpstcmdprocess_utest; public: // Construction and destruction /** * Creates a new instance of this class. * @param aEngine, reference to engine. * @return A new instance of this class. */ static CVIMPSTProcessArray* NewL( MVIMPSTEngine& aEngine); /** * Destructor. */ ~CVIMPSTProcessArray(); public: //form mvimpstchatobserver /** * @see MVIMPSTEngineIMSubServiceEventObserver.h **/ void HandleChatMessageEventL(TVIMPSTEnums::TIMEventType aEventType ,const TDesC& aSender ); public: /** * Observer Event for new add request * aRequester - requester for add request. */ void HandleAddRequestEventL(TVIMPSTEnums::TOperationType aType, const TDesC& aRequesterId, const TDesC& aRequestorDisplayName ); public : //from MVIMPSTProcessArray /** * register for array call back * @param aObserver: to be added */ void AddObserver(MVIMPSTProcessArrayObserver* aObserver) ; /** * unregister for array call back * @param aObserver: to be removed */ void RemoveObserver() ; /** * Count: Called by UI components to get total count of array * @return integer Count of array */ virtual TInt Count() const; /** * @return ETrue if presence service is enabled */ TBool IsSubServiceSupportedL( TVIMPSTEnums::SubServiceType aType ) const ; /** * @return, ETrue if IM is supported */ TBool IsIMSupported(); /** * @return, ETrue if Presence is supported */ TBool IsPresenceSupported(); /** * GetType: Function to get the type of list item * @param aIndex: index of the list item * @return TEnumsPC::TItem: type of the list item as EContactItem, EOwnStatusItem etc */ virtual TVIMPSTEnums::TItem GetType(TInt aIndex) const; /** * ResetArray: Function to reset and fill the array */ void ResetArray(); /** * GetItemNameText: To get item name of each list item * @param aIndex: Index of the list item whose name is to be returned * @return TPtrC: Name of the list item */ virtual TPtrC GetItemNameText(TInt aIndex); /** * SetLoginState: To set the loginstate. * @param aLoginState: state of login */ virtual void SetLoginStateL(TVIMPSTEnums::TVIMPSTRegistrationState aLoginState); /** * GetLoginState: To set the loginstate. * @return TVIMPSTRegistrationState, state of login */ virtual TVIMPSTEnums::TVIMPSTRegistrationState GetLoginState(); /** * @returns the VPBK Contact Link */ MVPbkContactLink* ContactLink(TInt aIndex); /** * GetOnlineStatusL gets the status of given index. * @param aIndex: Index of the item * @returns the onlinestatus of given valid index. */ TVIMPSTEnums::TOnlineStatus GetOnlineStatusL(TInt aIndex); /** * Get the status text for the contact * @param aIndex: Index of contact item * @return reference to the status text. */ const TDesC& StatusTextL(TInt aIndex ) ; /** * From MVIMPSTProcessArray * */ void MapContactListPositions(RArray<TInt>& aPositionArray ); /** * IsMsgPending: To find if there are any pending messages to * decide the icons for display * @param aIndex: index of the list item * @return bool: True if there are pending messages else false. */ TBool IsMsgPending(TInt aIndex); /** * ResetPendingMsg: To reset if there are any pending messages to * decide the icons for display * @param aIndex: index of the list item */ void ResetPendingMsg(TInt aIndex); /** * Find any contact which id is aContactId * @param aContactId, user id. * @return ETrue if contact already existst.else EFlase. */ TBool FindAnyContact( const TDesC& aContactId ); /** * Find any contact which id is aContactId * @param aContactId, user id. * @return ETrue if contact already existst.else EFlase. */ TBool FindAnyContactServiceField( const TDesC& aContactId ); /** * Find any friend request which id is aRequesterId * @param aRequesterId, user id. * @return ETrue if request already existst.else EFlase. */ TBool FindAnyAddRequest( const TDesC& aRequesterId ); /** * @param aRequesterId, user id. * @return ETrue if request already existst.else EFlase. */ TBool IsContactBlocked( const TDesC& aRequesterId ); /** * check if already conversation opened * @param aRecipientId, the selected user id with whom conversation is started * @return ETrue if already exist else EFlase. */ TBool IsConversationExistL(const TDesC& aRecipientId) ; /** * check if already conversation opened * @param aRecipientId, the selected user id with whom conversation is started * @return ETrue if already exist else EFlase. */ TBool IsConversationExist(TInt aIndex); /** * Find the index of contact with contact id as aContactId * @param aContactId : id of contact whose index is to be found * @return index of contact else KErrNotFounf if not found */ TInt FindContactIndexL( const TDesC& aContactId ) ; /** * GetItemNameText: To get item name of each list item * @param aIndex, Index of the list item whose name is to be returned * @return TPtrC, Name of the list item */ TPtrC GetItemUserId(TInt aIndex); /** * RemoveFriendRequest: To remove friend request from list. * @param aIndex, Index of the list item to be removed. */ void RemoveFriendRequestL(const TDesC& aRequesterId); /** * Login user name of the own user from settings * owener ship is transferred to the caller * @return allocated HBufC: Login user name of the own user from settings */ const TDesC& LoginUserIdFromStoreL() const; /** * OwnAvatarIndex: Returns the avatar index for the corresponding contact item * This index is used to append the avatar in the UI. * If index is ' 0 ', then it means no avatar is set. * * @return index of the own avatar */ TInt OwnAvatarIndexL( ) ; /** * OwnAvatarContent: Returns the mime type of the avatar image for the conatct * * If nothing returns KNullDesC8 * @return TDesC8& own avatar content */ const TDesC8& OwnAvatarContentL( ) const ; /** * SetOwnAvatarIndex: Sets the index for own avatar contact item * @param aAvatarIndex: Index to be set */ void SetOwnAvatarIndexL( TInt aAvatarIndex ); /** * AvatarMimeType: Returns the mime type of the avatar image for the conatct * * If nothing returns KNullDesC8 * @param aContactIndex : Index of the conatct item * * @return TDesC8& mime type of the avatar */ const TDesC8& AvatarContent(TInt aContactIndex) ; /** * SetAvatarIndex: Sets the index for avatar for for the corresponding contact item * * @param aContactIndex : Index of the conatct item * @param aAvatarIndex: Index to be set */ void SetAvatarIndex( TInt aContactIndex, TInt aAvatarIndex ); /** * AvatarIndex: Returns the avatar index for the corresponding contact item * This index is used to append the avatar in the UI. * If index is ' 0 ', then it means no avatar is set. * * @param aContactIndex : Index of the conatct item * * @return index of the own avatar */ TInt AvatarIndex(TInt aContactIndex) ; /** * from MVIMPSTProcessArray * Return index of aContactId (considering friend request also.). * @param aContactId, contact id for which index to be found. * @return, Index of aContactId including friend request. */ TInt GetSelectedItemIndex(const TDesC& aContactId); /* * find and return the array item */ MVIMPSTProcessArrayItem* FindArrayItem( const TDesC& aSenderId ); /* * reset all pending and open flags to EFalse */ void ResetOpenConversationPendingMsg(); /* * @aIndex, index for the listbox item whose descriptor is needed * @return, the descriptor for the array item to be used by listbox */ TPtrC16 GetFormattedString(TInt aIndex); public: // From MVIMPSTStorageContactsObserver /** * HandleChange: To handle the Chnage event from the MCAStoredContactsObserver * @see MCAStoredContactsObserver * @param aList: reference to the list at which a change has occured * @param aContact: reference to the contact at which a change has occured * @param aEventType: TVIMPSTEnums::TCAObserverEventType,type of change event that has occured * @param aUserIdChanged, ETrue if userid has changed, else EFalse. * @return void */ void HandleStorageChangeL( TVIMPSTEnums::TVIMPSTStorgaeEventType aEventType, MVIMPSTStorageContactList* aList, MVIMPSTStorageContact* aContact, TInt aContactIndex ); private: // Implementation /** * Default constructor * @param aEngine, reference to engine. */ CVIMPSTProcessArray( MVIMPSTEngine& aEngine ); /** * Second phase constructor */ void ConstructL(); /** * FillItemL: fill up the individual item in the array * @return void **/ void FillItemL(); /** * FillOwnDataL: fill up fill the owndata item * @return void **/ TBool FillOwnDataL(); /** * FillArray: fill up the complete array * @return void **/ void FillArrayL(); /** * fill the unknown contact to main array * @return void **/ void FillUnknownContactsL(); /** * FillAddRequestDataL: fill up the add request to array * @return void **/ void FillAddRequestDataL(); /** * remove all the unknown contacts from main array iItemArray, * so that unknown contact can pesist till the session is entertainesd. * @return void **/ void RemoveUnKnownContacts(); /** * RemoveAddRequestData: removes data from iItemArray, * so that request can pesist till the reqest is entertainesd. * @return void **/ void RemoveAddRequestData(); /** * handlle the message which is from unknown buddy * @param aSenderId , Sender Id * @return void **/ void DoHandleUnKnownContactMessageL( const TDesC& aSenderId ,TBool aIsMsgPending); /** * get the all open chat and append unknown contacts * @return void **/ void GetAndCreateOpenChatListL(); /** * remove the item from invitation or unknown array if found * @param aContactId : conatct user Id * @return ETrue if contact is removed */ TBool RemoveFromUnknonOrInvitationListL( const TDesC& aContactId , TBool aBlocked ) ; /** * play the incoming message tone. */ void PlayMsgBeepL(); /** * @return ETrue if unread message exist */ TBool IsUnreadMessageExistsL(const TDesC& aRecipientId); /** * helper method for removing unknown contacts * @return ETrue if contact is removed */ TBool RemoveFromUnknonListL( const TDesC& aAddedUserId ); /** * helper method for removing invitation contacts * @return ETrue if contact is removed */ TBool RemoveFromInvitationListL( const TDesC& aAddedUserId ); /** * helper method for finding and marking as open chat * @return ETrue if contact is find */ TBool FindAndMarkContactAsOpenChat( const TDesC& aContactId, TBool aMesssagePending ); private: // Data /** * starting index of Owndata , it's 0 as per ui spec **/ TInt iOwnDataIndex; /** * starting index of contacts , it's 0 as per ui spec **/ TInt iContactListIndex; //Ref to the engine item for current service MVIMPSTEngine& iEngine; /** * Flag to check whether own data added or not **/ TBool iOwnDataAdded; /** * Owns. Buffer that hold's information about fetched item **/ HBufC* iData; /** * reference to the contact list interface **/ MVIMPSTStorageServiceView* iContactInterface; // owned : take RPointerArray if nedded MVIMPSTProcessArrayObserver* iProcessObservers; /** * list of items here **/ RPointerArray<MVIMPSTProcessArrayItem> iItemArray; /** * reference to the contact list model * not owned. **/ MVIMPSTStorageItemModel* iContactListModel; //service id TUint32 iServiceId; TVIMPSTEnums::TVIMPSTRegistrationState iLoginState; /** * reference list of friend request items here **/ RPointerArray<CVIMPSTProcessFriendRequestItem> iAddRequestArray; /** * reference list of friend request items here **/ RPointerArray<CVIMPSTProcessUnknownContactItem> iUnKnownContactArray; // ETrue if fetch completed TBool iFetchCompleted; // ETrue if engine supports IM subservice TBool iIMSupported; // ETrue if engine supports Presence subservice TBool iPresenceSupported; };#endif // _CVIMPSTPROCESSARRAY_H// End of File