uiservicetab/vimpstcmdprocess/inc/cvimpstprocessarray.h
changeset 0 5e5d6b214f4f
--- /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