--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/uiservicetab/vimpstcmdprocess/inc/cvimpstprocessarray.h Tue Feb 02 10:12:18 2010 +0200
@@ -0,0 +1,531 @@
+/*
+* 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 DECLARATION
+class 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