--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/wvuiprocess/Inc/CCAMainViewArrayPC.h Thu Dec 17 08:41:52 2009 +0200
@@ -0,0 +1,1247 @@
+/*
+* Copyright (c) 2006 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: Implementation class for MCAMainViewArrayPC, to decide how to fill the
+* single view array decorator
+*
+*/
+
+
+
+#ifndef CCAMAINVIEWARRAYPC_H
+#define CCAMAINVIEWARRAYPC_H
+
+#include <e32base.h>
+
+
+//Forward Declaration
+class MCAContactListModel;
+class MCAArrayItemPC;
+class CCAEngine;
+class MCAInvite;
+class MCAInvitation;
+class MCAServerContactsArrayPC;
+class MCAStoredGroup;
+class CCAGroupListArrayPC;
+class MCASingleListViewCB;
+class MCAStoredGroups;
+
+#include "MCAMainViewObserverManagerPC.h"
+#include "MCAMainViewObserverPC.h"
+#include "MCAStoredContactsObserver.h"
+#include "MCAMainViewArrayPC.h"
+#include "MCAWatcherObserver.h"
+#include "MCAStoredContacts.h"
+#include "MCAChatInterface.h"
+#include "ChatDefinitions.h"
+#include "MCASettingsObserver.h"
+#include "MCAInviteObserver.h"
+#include "MCASettingsPC.h"
+#include "MCAChatObserver.h"
+#include "MWVSettingsObserverng.h"
+#include "MCAStoredGroupsObserver.h"
+#include "MCASyncObserverPC.h"
+
+#include <MIMPSSAPObserver.h>
+#include <CIMPSSAPSettingsStore.h>
+#include <cimpspresenceconnectionuing.h>
+
+#include "MCAListInitObserver.h"
+
+class CCAMainViewArrayPC: public CBase,
+ public MCAMainViewArrayPC, // this class own interface.
+ public MCASettingsObserver, // events from engine.
+ public MCAStoredGroupsObserver, // events from engine.
+ public MCAMainViewObserverManagerPC,
+ public MCAWatcherObserver,
+ public MCAInviteObserver,
+ public MCAChatObserver,
+
+ // This callback is required when ever the server is added or deleted
+ // we get a callback and update the singlelist
+ public MIMPSSAPObserver,
+ public MCAListInitObserver,
+ public MCAStoredContactsObserver
+
+ {
+ public:
+ struct TArrayPairs // Struct to hold identification and buffer
+ {
+ TBuf<KMaxWVIDLength> iIdentification;
+ MCAMessagesReadInterface* iReadInterface;
+ };
+
+ struct TInvitationArray // Struct to hold identification and buffer
+ {
+ TDesC* iUserID;
+ TDesC* iMessage;
+ };
+ public: //Constructor and Destructors
+ /**
+ * construction
+ */
+ void ConstructL();
+ /**
+ * construction
+ * @param aContactListModel : a reference to the contact list model object at the chat engine
+ */
+ static CCAMainViewArrayPC* NewL( CCAEngine& aEngine,
+ MCAContactListModel& aContactListModel,
+ MCAChatInterface& aChatInterface );
+
+ private:
+ /**
+ * default constructor
+ * @param aContactListModel : a reference to the contact
+ * list model object at the chat engine
+ */
+ CCAMainViewArrayPC( CCAEngine& aEngine,
+ MCAContactListModel& aContactListModel,
+ MCAChatInterface& aChatInterface );
+
+ public:
+ /**
+ * virtual destructor
+ */
+ virtual ~CCAMainViewArrayPC();
+
+
+ public: // From MCAMainViewArrayPC
+
+ /**
+ * Gets the details of the given index
+ * like aItemId, aListId,aItemType.
+ * @return the structure filled with tha above details.
+ */
+ TCAItemDetails GetArrayItemIdDetails( TInt aIndex );
+
+ /**
+ * Gets the Index, given item details
+ * like aItemId, aListId,aItemType.
+ * @return the index
+ */
+ TInt GetArrayItemIdIndexL( const TCAItemDetails& aItemDetails );
+ /**
+ * @return returns ETrue if any contact is found in contactlists
+ * else returns EFalse if no contact is found
+ */
+ TBool IsAnyContactFound();
+
+ /**
+ * Populate the group array iGroupArray with groups
+ */
+ void PopulateGroupsListL();
+
+ /**
+ * SetSkipStorageEvents: Called by UI component to set flag for skipping storage events
+ * @param aSkip : A flag to check whether to skip strage events or not
+ * @return void
+ */
+ virtual void SetSkipStorageEvents( TBool aSkip );
+
+ /**
+ * GetSkipStorageEvents: Called by UI component to get the flag for skipping storage events
+ * @return boolean
+ */
+ virtual TBool GetSkipStorageEvents();
+
+ /**
+ * Count: Called by UI components to get total count of array
+ * @return integer: Count of array
+ */
+ virtual TInt Count() const;
+
+ /**
+ * 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 TEnumsPC::TItem GetType( TInt aIndex ) const;
+
+ /**
+ * IsCollapsed: To find if the list box item is collapsed
+ * @param aIndex: index of the list item
+ * @return bool: True if the list item is collapsed else false.
+ */
+ virtual TBool IsCollapsed( TInt aIndex ) const;
+
+ /**
+ * 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.
+ */
+ virtual TBool IsMsgPending( TInt aIndex ) ;
+
+ /**
+ * IsBlocked: To find if the list item is a blocked contact
+ * @param aIndex: index of the list item
+ * @return bool: True if the list item is a blocked contact else false
+ */
+ virtual TBool IsBlocked( TInt aIndex ) const;
+
+ /**
+ * ForceExpanded: To expand or collapse all the list items
+ * @param aAllExpanded: True if all items have to be expanded else false
+ * @return bool: True if there are pending messages else false.
+ */
+ virtual void ForceExpanded( TBool aAllExpanded );
+
+ /**
+ * IsForceExpanded: To find if all the list items have been force expanded
+ * @return bool: True if all the list items are force expanded else false
+ */
+ virtual TBool IsForceExpanded() const;
+
+ /**
+ * GetOnlineStatus: To get the online status of the list item as Online, Away, Busy etc
+ * @param aIndex: Index of the list item
+ * @return TEnumsPC::TOnlineStatus
+ */
+ virtual TEnumsPC::TOnlineStatus GetOnlineStatus( TInt aIndex );
+
+ /**
+ * SetCollapsed: To set the list item to a collapsed or expanded state
+ * @param aStatus: The collapsed or expanded state to be set for the list item
+ * @param aIndex: Index of the list item whose state has to be set
+ * @return void
+ */
+ virtual void SetCollapsed( TBool aStatus, TInt aIndex );
+
+ /**
+ * SetSelected:
+ * @param aSelected: selected or not
+ * @return aIndex ,given index
+ */
+ virtual void SetSelected( TBool aSelected, TInt aIndex );
+
+ /**
+ * GetSelectedL: get the selcetd
+ * @param aSelectedContact: selected conatct
+ * @param aSelectedIdentifications
+ * @return aFilter
+ */
+ virtual void GetSelectedL( CDesCArray& aSelectedContact,
+ CDesCArray* aSelectedIdentifications,
+ TEnumsPC::TFilterType aFilter );
+
+ /**
+ * Sets the selectionmode
+ * @param aSelectionMode to be set
+ * @param aSelectedListIndex - selected contactlist index - used for
+ * group creation using existing contact list to get all the contacts in that
+ * contact list
+ */
+
+ void SetContactSelectionL( TEnumsPC::TListSelectionType aSelectionMode,
+ TInt aSelectedListIndex );
+
+ /**
+ * Resets the selectionmode
+ */
+ void ResetContactSelectionL();
+
+ /**
+ * Returns index for given invitation
+ * @param aIndex
+ * @return index of invitation
+ */
+ TInt GetItemEngineIndex( TInt aIndex ) const;
+
+ /**
+ * Sets the focus to the owndata on logout.
+ */
+ virtual void SetCurrentItemIndexL( TBool aFreshLogin = EFalse );
+
+ /**
+ * Find any contact which id is aContactId
+ * @param aContactId Contactid to recognize contact.
+ * @return ETrue if contact found else EFalse
+ */
+ TBool FindAnyContactL( const TDesC& aContactId );
+
+
+ /**
+ * Appends the received invitation to the top of the array
+ * @param aInvitation
+ */
+ void AddInvitation( const MCAInvitation* aInvitation );
+
+ /**
+ * Returns index of invitation for given wvid and
+ * Deletes item from array.
+ * @since 3.2
+ * @param Index of invitation
+ * @return index at which the invite has been deleted.
+ */
+ virtual TInt FindInvitationAndDelete( const TDesC& aInviteID /*TInt aIndex*/ );
+
+
+ virtual TInt FindInvitationAndDelete( TInt aIndex );
+
+
+
+ /**
+ * SetMsgPending: To set the pending messages for a list item
+ * @param aPendingMsgs: The no. of pending messages to be set for the list item
+ * @param aIndex: Index of the list item
+ * @return void
+ */
+ virtual void SetMsgPending( TInt aPendingMsgs, TInt aIndex );
+
+ /**
+ * SetBlocked: To set the blocked status of a list item of type contact
+ * @param aStatus: The blocked status to be set for the list item
+ * @param aIndex: Index of the list item whose status has to be set
+ * @return void
+ */
+ virtual void SetBlocked( TBool aStatus, TInt aIndex );
+
+ /**
+ * SetOnlineStatus: To set the online status of a list item
+ * @param aStatus: The online status to be set for the list item
+ * @param aIndex: Index of the list item whose status has to be set
+ * @return void
+ */
+ virtual void SetOnlineStatus( TEnumsPC::TOnlineStatus aStatus, TInt aIndex );
+
+ /**
+ * 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 );
+
+ /**
+ * GetFormattedItemNameTextL: To set/rename item name of each list item
+ * @param aIndex: Index of the list item whose name is to be changed/set
+ * @return TPtr: Error code to check if the name has been set
+ */
+ virtual TPtr GetFormattedItemNameTextL( TInt aIndex );
+
+ /**
+ * ClearArray: clear everything in the array
+ * @return void
+ */
+ virtual void ClearArray( TBool aClearOpenChatsArray );
+
+
+ /** ResetArray: reset the array,clear and fill with the new data in the array
+ * @return void
+ */
+ virtual void ResetArray( TBool aClearOpenChatsArray );
+
+ /**
+ * SetDefaultFilter: To set the default filters of each item
+ * @param aMyFilter: TEnumsPC::TFilterType to be set
+ * @return void
+ */
+ virtual void SetDefaultFilter( TEnumsPC::TFilterType aMyFilter );
+
+ /**
+ * ResetDefaultFilter: To reset the default filters of each item
+ * @return void
+ */
+ virtual void ResetDefaultFilter();
+
+ /**
+ * GetDefaultFilter: To get the default filters of list item
+ * @return TEnumsPC::TFilterType: type of filter
+ */
+ virtual TEnumsPC::TFilterType GetDefaultFilter() const;
+
+ /**
+ * Should the model show "All" item in beginning
+ * of each contact list.
+ * @param aShow If ETrue, first item in every contact list is "All"
+ */
+ void ShowAll( TBool aShow );
+
+
+ /**
+ * ClientType: To get the client type of list item at given index
+ * @return TEnumsPC::TClientType: type of client
+ */
+ virtual TEnumsPC::TClientType ClientType( TInt aIndex );
+
+ /**
+ * Selected: To know if the list item at given index is selected currently
+ * @param aIndex: index of list item
+ * @return bool: true if the list item at given index is selected currently else false
+ */
+ virtual TBool Selected( TInt aIndex );
+
+ /**
+ * IsWatched: To get the status on whether the list item at given index is
+ * being watched for notifications on that contacts online status changes
+ * @param aIndex: index of list item
+ * @return bool: true if the contact is being watched else false
+ */
+ virtual TBool IsWatched( TInt aIndex );
+
+ /**
+ * AddWatcher: To add watcher to presence
+ */
+ virtual void AddWatcherL( TPtrC contact/*wvid*/ );
+
+
+ /**
+ * RemoveWatcher: To remove watcher from presence
+ *
+ */
+ virtual void RemoveWatcherL( TPtrC contact/*wvid*/ );
+
+ /**
+ * Refreshes friends-storage presence data.
+ */
+ virtual void RefreshFriendsL();
+
+ /**
+ * Clears all selected-flags
+ */
+ virtual void ClearSelectedL( );
+
+ /**
+ * Places all friends to aUsers array
+ */
+
+ /* Places all friends (from aUserList) that are online to aOnlineList
+ * and users that are offline to aOfflineList.
+ * @param aUserList List of users, whose presence data is to be fetched.
+ * @param aOnlineList List of users, that are online, can be NULL.
+ * @param aOfflineList List of users, that are offline, can be NULL.
+ * @param aUpdateStorage If ETrue, contact storage flags are updated
+ */
+ virtual void GetOnlineUsersL(
+ const CDesCArray *aUsers,
+ CDesCArray* aOnlineList,
+ CDesCArray* aOfflineList,
+ TBool aUpdateStorage = EFalse ) ;
+
+ /**
+ * Synchronised: To get the synchronised status for the list item
+ * @param aIndex: index of list item
+ * @return TEnumsPC::TSyncStatus: the synchronization status of the list item
+ */
+ virtual TEnumsPC::TSyncStatus Synchronised( TInt aIndex );
+
+ /**
+ * IsAllSynchronised: To get the synchronised status of all the list items
+ * @return TEnumsPC::TSyncStatus: the synchronization status of all the items
+ */
+ virtual TEnumsPC::TSyncStatus IsAllSynchronised();
+
+ /**
+ * Changes client own presence status, and sets status message
+ * @param aStatus Presence status -online,oflline etc
+ * @param aStatusMessage Presence status message
+ * @return Error code.
+ */
+ TInt ChangeStatusL( TEnumsPC::TOnlineStatus aStatus,
+ const TDesC& aStatusMessage ) ;
+
+ /**
+ * Changes presence status message
+ * @param aStatusMessage Presence status message
+ * @return Operation error.
+ */
+ TInt ChangeStatusMessageL( const TDesC& aStatusMessage ) ;
+
+ /**
+ * StatusL: To get the own status like Online, Away, Busy etc
+ * @return TEnumsPC::TOnlineStatus
+ */
+ TEnumsPC::TOnlineStatus StatusL();
+
+ /**
+ * GetOwnStatusConverter: To get TEnumsPC:TOnlineStatus type of enum from
+ * the presence side MCAPresence::TPresenceStatus enums for own status
+ * @param aPresenceStatus: presence side MCAPresence::TPresenceStatus enums
+ * @return TEnumsPC::TOnlineStatus
+ */
+ TEnumsPC::TOnlineStatus GetOwnStatusConverter(
+ MCAPresence::TPresenceStatus aPresenceStatus );
+ /**
+ * Fills aOnlineList with the user id's from friends-list that are
+ * online.
+ * @param aOnlineList List that will be populated with online friends.
+ * @param aFetchFromNetwork Fetch presence information from network
+ */
+ void GetOnlineContactsL( CDesCArray& aOnlineList,
+ TBool aFetchFromNetwork = EFalse );
+
+
+
+ /**
+ * RegisterObserverL: To add the UI component as an observer to listen to the
+ * event from the MainViewArrayPC
+ * @see MCAListInitObserver
+ * @return void
+ */
+ void RegisterObserverL( MCAListInitObserver* aObserver ) ;
+
+ /**
+ * UnRegisterObserverL: To remove form the listener
+ * @see MCAListInitObserver
+ * @return void
+ */
+ void UnRegisterObserverL() ;
+
+ /**
+ * AIsListInitializationCompleteL:
+ * @return Bool value
+ */
+ TBool IsListInitializationCompletedL() ;
+
+
+
+ /**
+ * Refresh the conversation item in openchats to
+ * reflect the changes upon addation/chang/deletion of a contact
+ * @param aContactId: userId whose nickname is changed.
+ */
+ void RefreshConversationItemText( const TDesC& aContactId );
+
+ /**
+ * Refresh the Invitation item in openchats to
+ * reflect the changes upon addation/chang/deletion of a contact
+ * @param aContactId: userId whose nickname is changed.
+ */
+ void RefreshInvitationItemTextL( const TDesC& aContactId );
+
+ public: // From MCAMainViewObserverManagerPC
+
+ /**
+ * AddObserverL: To add the UI component as an observer to listen to the
+ * event from the MainViewArrayPC
+ * @see MCAMainViewObserverManagerPC
+ * @return void
+ */
+ void AddObserverL( MCAMainViewObserverPC* aObserver );
+
+ /**
+ * RemoveObserver: To remove the UI component as an observer to the
+ * events from the MainViewArrayPC
+ * @see MCAMainViewObserverManagerPC
+ * @return void
+ */
+ void RemoveObserver( MCAMainViewObserverPC* aObserver );
+
+ /**
+ * AddObserverL: To add the UI component as an observer to listen to the
+ * event from the MainViewArrayPC
+ * @see MCAMainViewObserverManagerPC
+ * @return void
+ */
+ void AddObserver( MCASyncObserverPC* aObserver );
+
+ /**
+ * RemoveObserver: To remove the UI component as an observer to the
+ * events from the MainViewArrayPC
+ * @see MCAMainViewObserverManagerPC
+ * @return void
+ */
+ void RemoveObserver( );
+
+ public: //MCAChatObserver
+ /**
+ * Handle events.
+ * @param aEvent Event to handle.
+ * @param aMessage, Event occurred because of message
+ */
+ virtual void HandleChatEvent( TChatEventType aEvent,
+ MCAMessage* aMessage = NULL );
+
+ public: //MCAsyncObserverPC
+
+ virtual void NotifySyncCompleted();
+ public: //From MCAStoredContactsObserver
+
+ /**
+ * HandleContactDelete: To handle the contact delete event from the MCAStoredContactsObserver
+ * @see MCAStoredContactsObserver
+ * @param aContactId: contact whihc has been deleted
+ * @return void
+ */
+ virtual void HandleContactDelete( const TDesC& aContactId );
+
+ /**
+ * HandleAddition: To handle the contact addition event from the MCAStoredContactsObserver
+ * @see MCAStoredContactsObserver
+ * @param aList: reference to the list to which the contact has been added
+ * @param aContact: reference to the contact which has been added
+ * @return void
+ */
+ virtual void HandleAddition( MCAContactList& aList, MCAStoredContact& aContact );
+
+ /**
+ * 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: TStorageManagerGlobals::TCAObserverEventType :
+ * type of change event that has occured
+ * @return void
+ */
+ virtual void HandleChange( MCAContactList* aList,
+ MCAStoredContact* aContact,
+ TStorageManagerGlobals::TCAObserverEventType aEventType,
+ TBool aUserIdChanged );
+
+
+ public: //From MCASettingsObserver
+
+ /**
+ * HandleSettingsChangeL: To handle the change events in settings
+ * @see MCASettingsObserver
+ * @param aChangedSettingEnum: enumeration of the type of settings change
+ * @return void
+ */
+ virtual void HandleSettingsChangeL( TInt aChangedSettingEnum );
+
+ public: //From MCAWatcherObserver
+
+ /**
+ * HandleWatcherEvent: To handle the watch events for a contact
+ * @see MCAWatcherObserver
+ * @param aContact: reference to the contact at which a watch event has occured
+ */
+ void HandleWatcherEvent( const MCAStoredContact* aContact );
+
+ public: // From MCAInviteObserver
+
+ /**
+ * @see MCAInviteObserver
+ */
+ void HandleInvitationEventL( TInviteEventType aEvent,
+ const MCAInvitation* aInvitation );
+
+ /**
+ * @see MCAInviteObserver
+ */
+ void HandleInvitationResponse( TBool aAcceptance,
+ const TDesC& aUserId,
+ const TDesC& aGroupName,
+ const TDesC& aResponse );
+ public://for CallBacks.
+
+ void RegisterCallBack( MCASingleListViewCB* aSingleViewCB );
+
+ void UnRegisterCallBack( );
+ public:
+
+ /*
+ * gets the alias of the specified contact at aIndex
+ * @param aIndex: index of contact
+ * @return the alias
+ */
+ virtual const TDesC& GetSelectedContactAlias( TInt aIndex );
+
+ /*
+ * gets the nickname of the specified contact at aIndex
+ * @param aIndex: index of contact
+ * @return the nickname
+ */
+ virtual const TDesC& GetSelectedContactNickname( TInt aIndex );
+
+ /*
+ * gets the user id of the specified contact at aIndex
+ * @param aIndex: index of contact
+ * @return the user id
+ */
+ virtual const TDesC& GetSelectedContactUserId( TInt aIndex );
+
+ /*
+ * gets the identification of the specified contact at aIndex
+ * @param aIndex: index of contact
+ * @return the identification
+ */
+ virtual const TDesC& GetSelectedContactIdentification( TInt aIndex );
+
+
+ /*
+ * Gets the MCAStoredContact type for the specified contact at aIndex
+ * This method is for use by the CCAContactEditor class and is not exposed
+ * via the MCAMainViewArrayPC interface
+ * @param aIndex: index of contact
+ * @return the alias
+ */
+ MCAStoredContact* GetContactForContactEditor( TInt aIndex );
+
+ // See the comment @MCAMainViewArrayPC
+
+ virtual void MapContactListPositions( RArray<TInt>& aPositionArray );
+
+ /*
+ * gets the displayname of the specified List at aIndex
+ * @param aIndex: index of list
+ * @return the displayname
+ */
+
+ virtual TPtrC DisplayName( TInt aIndex );
+
+ /**
+ * SetDisplayName: To set/rename item name of each list item
+ * @param aIndex: Index of the list item whose name is to be changed/set
+ * @param aItemName: name to be set for the list item at specified index
+ * @return TInt: Error code to check if the name has been set
+ */
+ virtual TInt SetDisplayNameL( TInt aIndex, const TPtrC aItemName );
+
+ /*
+ * gets the FilteredCount
+ * @param aFilter: type of filetr
+ * @param aIndex: index of list
+ * @return the count
+ */
+ virtual TInt GetFilteredCount( TEnumsPC::TFilterType aFilter, TInt aIndex );
+ /**
+ * Set a separate filter for the single list view array items
+ * @param aFilter: filter to be set
+ */
+ virtual void SetSingleListArrayFilter( TEnumsPC::TFilterType aFilter );
+
+ /**
+ * Get a separate filter for the single list view array items
+ * @return filter
+ */
+ virtual TEnumsPC::TFilterType GetSingleListArrayFilter( );
+
+
+ public:
+ /**
+ * Find a contact from the store by wv User ID
+ * @param aContactListId List which contains contact.
+ * @param aId the User ID of the contact to find
+ * @return The contact
+ */
+ virtual TInt FindContactL( const TDesC& aContactListId,
+ const TDesC& aId );
+
+ /**
+ * Find a contact list from the store by wv User ID
+ * @param aContactListId List which contains contact list id.
+ * @return The contact list index
+ */
+ virtual TInt FindContactListIndexL( const TDesC& aListId );
+ /* gets the list id of the specified list at aIndex
+ * @param aIndex: index of list
+ * @return the list id
+ */
+ virtual const TDesC& GetSelectedListId( TInt aIndex );
+
+ /**
+ * Checks status of aContact and shows needed notes accordign to variation.
+ * @param aIndex: index of contact to be checked.
+ * @return Integer value, negative if offline status is not ignored or
+ * allowed by variation, positive if contact is online
+ * or user decides to ignore offline status. See possible
+ * return values from IMUtils::TIgnoreOfflineStatus enum.
+ */
+ virtual TInt IgnoreOfflineStatusL( TInt aIndex );
+
+ /**
+ * SetMessageReadInterfaceL: Calls the MessageReadInterface() of engine component
+ * to set the read interface
+ * @param aIndex: index of contact for whom the read interface (conversation) has
+ * to be set
+ * @return void
+ */
+ virtual void SetMessageReadInterfaceL( TInt aIndex );
+
+ /**
+ * ChatExistsL: Checks if there is an existing chat for the contact
+ * at index
+ * @param aIndex: index of contact for which the existing
+ * conversation has to be checked
+ * @return bool: If chat exists for contact at aIndex return true
+ * else return false
+ */
+ virtual TBool ChatExistsL( TInt aIndex );
+
+ /**
+ * Get index for list
+ * @param aIndex: index of Contact item to be found.
+ * @param aIgnoreOwnItem. If ETrue own item is not taken into account
+ * when resolving index.
+ * @param aIgnoreEmptyLists If ETrue, empty lists are ignored.
+ * @return Index of list. If list not found returns KErrNotFound
+ */
+ virtual TInt IndexOfList( TInt aIndex,
+ TBool aIgnoreOwnItem = EFalse,
+ TBool aIgnoreEmptyLists = ETrue ) const;
+
+
+ /**
+ * Check if synchronization of contact lists is done
+ * @return ETrue if done
+ */
+ virtual TBool IsSyncDoneL();
+
+
+ /**
+ * To create a contact list with given name
+ * @param aDisplayName: name of the list to be created
+ * @return KErrNone if list is created else retrun KErrAlreadyExists
+ */
+
+ virtual TInt CreateContactListL( const TDesC& aDisplayName , TInt& aIndex ) ;
+
+ /**
+ * To sort the contact list in alphbetical order
+ * @param alistId: list id of renamed contact list
+ */
+ virtual TInt SortContactListAfterRenameL( const TDesC& alistId ) ;
+
+ /**
+ * Find if there is a list with given name already
+ * @param aNamePtr: name of the list to be searched
+ * @return KErrNone if theres no list with the name aNamePtr else return KErrAlreadyExists
+ */
+
+ virtual TInt ListAlreadyExistsL( const TPtr aNamePtr );
+
+ /**
+ * Check if there are any contact list in the contact lists
+ * @return KErrGeneral if no contact list is available else return KErrNone
+ */
+ virtual TInt ContactListsExistL();
+
+
+ /**
+ * Find the no. of contact items in the contact list
+ * @param aIndex: the index of contact list
+ * @return TInt: the no. of contact items in the list at aIndex
+ */
+ virtual TInt CountOfContactsInList( TInt aIndex );
+
+ /**
+ * Count of lists.
+ * @return Count of lists.
+ */
+ virtual TInt ListCountL() const;
+
+ /**
+ * Delete the contact list
+ * @param aIndex: ID of the list
+ * @return Error code
+ */
+ virtual TInt DeleteContactListL( TInt aIndex );
+ /**
+ * Deletes one contact from server side contact list
+ * @param aIndex: Index of list to be updated
+ * @return Error code
+ */
+ virtual TInt DeleteServerContactL( TInt aIndex );
+
+ /**
+ * Get the status text for the contact
+ * @param aIndex: Index of contact item
+ * @return Error code
+ */
+ virtual const TDesC& StatusText( TInt aIndex ) const;
+
+ /**
+ * Invoke the fetch contacts method from presence component
+ */
+ virtual void FetchContactsL();
+ /**
+ * to convert engine enum value to PC enum values
+ * @param aStatus: value of engine value
+ */
+ TEnumsPC::TCASettingValues ConvertToEnumsPC( TInt aStatus );
+
+
+ public:
+
+ const RPointerArray<MCAArrayItemPC>& GetOpenChatsArray() const ;
+
+ /**
+ * @returns the index of the given item W.R.T singlelistview.
+ */
+ TInt FindIndexOfOpenChatsItem( TEnumsPC::TItem aItemType,
+ const TDesC& aId );
+
+ TInt GetOpenChatsActiveIndex()const;
+
+ private:
+ /**
+ * FillArray: fill up the complete array
+ * @return void
+ */
+ void FillArrayL( TBool aFillOpenChatsArray );
+
+
+ /**
+ * FillOwnDataL: fill up fill the owndata item
+ * @return void
+ */
+ TBool FillOwnDataL();
+
+ /**
+ * FillOpenChatsL: then fill the conversations..or open chats....
+ * @return void
+ */
+ //
+ void FillOpenChatsL();
+
+ /**
+ * FillContactListsL: then fill the contacts lists/contacts..etc..
+ * @return void
+ */
+ void FillContactListsL();
+
+ void FillSelectedContactListL( );
+
+
+
+ /**
+ * FillItemL: fill up the individual item in the array
+ * @param aIndex: index of the list item for which the array has to be filled
+ * @return void
+ */
+ void FillItemL( TInt aIndex );
+
+ /**
+ * GetResourceValueL: To get the integer equivalent of resource string
+ * @param aResourceID: id of the resource string
+ * @return TInt: integer equivalent of resource string
+ */
+ TInt GetResourceValueL( TInt aResourceID );
+
+ /**
+ * GetOnlineStatusConverter: To get TEnumsPC:TOnlineStatus type of enum from
+ * the engine /storage side TStorageManagerGlobals::TPresenceStatus enums
+ * @param aEngOnlineStatus: engine /storage side TStorageManagerGlobals::TPresenceStatus enums
+ * @return TInt: TEnumsPC::TOnlineStatus
+ */
+ TEnumsPC::TOnlineStatus GetOnlineStatusConverter(
+ TStorageManagerGlobals::TPresenceStatus aEngOnlineStatus );
+
+
+ /**
+ * GetTypeConverter: To get TEnumsPC:TItem type of enum from
+ * the engine side MCAContactListModel::TItemType enums
+ * @param aItemType: engine side MCAContactListModel::TItemType enums
+ * @return TInt: EnumsPC::TItem
+ */
+ TEnumsPC::TItem GetTypeConverter( MCAContactListModel::TItemType aItemType ) const;
+
+ /**
+ * ToUpdatePresence: To get the information on whether presence has to be updated
+ * by anding the two filters
+ * @parm aFilter1: TEnumsPC::TFilterType
+ * @parm aFilter2: TEnumsPC::TFilterType
+ */
+ virtual TBool ToUpdatePresence( TEnumsPC::TFilterType aFilter1,
+ TEnumsPC::TFilterType aFilter2 );
+
+ /**
+ * To set the filter type for engine
+ */
+ virtual void SetFilter( TEnumsPC::TFilterType aFilter );
+
+ /**
+ * To get the filter type for engine
+ */
+ virtual TEnumsPC::TFilterType Filter();
+
+ /**
+ * To set the group count down flag, for each logout. For the first time login
+ * it is set in the constructor to EFalse. This flag ensures that the
+ * initial deletion of groups from iGroupArray and the subsequent additions
+ * of user created groups are not reflected on the UI
+ */
+ virtual void ResetGroupCountDownOnLogout();
+
+ virtual const TDesC& GetInviteItemID( TInt aIndex );
+
+
+
+
+ // This callback is required when ever the server is added or deleted
+ // we get a callback and update the singlelist
+ /**
+ * From MIMPSSAPObserver
+ * @see MIMPSSAPObserver for more information
+ */
+ void HandleSAPEvent( TSAPEvent aEvent );
+ public: // From MCAStoredGroupsObserver
+
+ /**
+ * Called when a group is deleted.
+ * @param aId The ID of the deleted group
+ */
+ void HandleDelete( const TDesC& aId );
+
+ /**
+ * Called when a group is added.
+ * @param aId The ID of the added group
+ */
+ void HandleAddition( const TDesC& aId );
+
+ /**
+ * Called when a group is changed.
+ * @param aId The ID of the changed group
+ */
+ void HandleChange( const TDesC& aId );
+
+ /**
+ * Called when backup/restore starts/stops.
+ * There is no distinction between backup/restore (Symbian limitation).
+ * However, the called party should fetch new list(s) as they
+ * may have changed if the operation was restore operation.
+ * @param aEventType Type of backup/restore event
+ */
+ void HandleBackupRestoreEvent(
+ const TStorageManagerGlobals::TCAObserverEventType aEventType );
+
+ public: //Added methods for sorting of openchats
+
+ //To Insert a newly arrived Invite on top of openchats list
+ void InsertInviteItemL( const MCAInvitation* aInvitation );
+ void InsertGroupItemL( MCAStoredGroup* aGroup );
+ void InsertConversationItemL( const TDesC& aUserId,
+ const TDesC& aIdentification );
+ void MoveGroupItem( MCAStoredGroup* aGroup, TInt aFoundIndex );
+ void RemoveConversationItem( const TDesC& aUserId );
+
+ TBool IsOpenChatsMsgPending(
+ const TEnumsPC::TItem aType,
+ const TDesC& aId );
+
+ public: //from MCAMainViewArrayPC.h
+
+ /**
+ * See MCAMainViewArrayPC.h
+ */
+ const TDesC& PendingMessageInfo();
+
+ /**
+ * See MCAMainViewArrayPC.h
+ */
+ const TDesC& ChatGroupPendingMessageInfo( TDesC& aGroupName );
+
+ /**
+ * See MCAMainViewArrayPC.h
+ */
+ TInt GetIndexOfTopPendingMessage();
+
+ public: // MCAListInitObserver
+ /**
+ * Callback HandleListInitChange from presence list manager
+ * after the list init complete
+ */
+ void HandleListInitChange( TBool aCompleted );
+
+
+ private:
+
+ TStorageManagerGlobals::TFilterType GetFilterConverterUITOEngine(
+ TEnumsPC::TFilterType aFilter );
+
+ void HandleError( TInt );
+
+ void HandleItemRemovalL( const TDesC& aContactId );
+
+ void HandleItemAdditionL( MCAStoredContact & aContact );
+
+
+ private://Added methods for sorting of openchats
+
+ TInt ChatGroupMessagesPendingCount() const;
+
+ void ResetOpenChatsArrayL( TEnumsPC::TItem aItem );
+
+ void InsertIntoInactiveOpenChats( TBool aEnd );
+
+ void SetContactListIndex();
+ TEnumsPC::TItem GetOpenChatType( TInt aIndex ) const;
+
+ TInt RemoveGroupItem( const TDesC& aGroupId );
+
+ //method to get bool equivalent for selction mode. Added to make code readable
+ //Returns true if single list view selection mode else false.
+ TBool SingleListViewSelectMode() const;
+
+ void RefreshOpenChatsListItemL();
+
+ void RefreshGroupItem( MCAStoredGroup* aGroup, TInt aFoundIndex );
+
+
+ private:
+
+ //Refenence to engine
+ CCAEngine& iEngine;
+
+ TBool iSkipStorageEvents;
+
+ /**
+ * list of items here
+ */
+ RPointerArray<MCAArrayItemPC> iMainViewListItemArray;
+
+ // we need to maintain the list of observers here.whenever any event is
+ // happening then we need call back the UI
+
+ /*
+ * Observers : replace this array with pointer variable and overload = operator.
+ */
+ RPointerArray< MCAMainViewObserverPC > iMainViewObservers;
+
+ /*
+ * reference to the contact list model
+ */
+ MCAContactListModel& iContactListModel;
+
+ /*
+ * Reference to chat interface
+ */
+ MCAChatInterface& iChatInterface;
+
+ /**
+ * Reference to Invite Interface
+ */
+ MCAInvite& iInviteInterface;
+
+ //Owns. Array of active invitations
+ RPointerArray<MCAInvitation> iInvitationsArray;
+
+ /*
+ * reference to the contact list interface
+ */
+ MCAStoredContacts* iContactInterface;
+
+ // is "all" item displayed in beginning of each list
+ //used in displaying blockinglist
+ TBool iShowAll;
+
+ // Owns
+ HBufC* iRejectReason;
+ /*
+ * starting index of Owndata , it's 0 as per ui spec
+ */
+ int iOwnDataIndex;
+ /*
+ * starting index of OpenChats , it's 1 as per ui spec
+ */
+ int iOpenChatsIndex;
+ /*
+ * starting index of all the contactlists
+ * it's iOpenChatsIndex+iOwnDataIndex+NoofConversations, if anything is exists
+ */
+ int iContactListIndex;
+ /*
+ * flag to check whether openchats folder expanded or collapsed
+ */
+ TBool iOpenChatListItemExpanded;
+ /*
+ * Flag to check whether own data added or not
+ */
+ TBool iOwnDataAdded;
+
+ /*
+ * Flag if mainviewarraypc is used in selectoin mode from contact selection dialog
+ */
+
+ TEnumsPC::TListSelectionType iSelectionMode;
+
+ TInt iSelectedListIndex;
+
+ TBool iSetListCollapsedFlag;
+
+
+ TBool iForceExpandDone;
+ /*
+ * Flag if user or findbox is expanded the array pc
+ */
+ TBool iExpandAll;
+
+ /*
+ * reference to the settings interface
+ */
+ MCASettings* iSettings;
+
+ /*
+ * Owns. Buffer that hold's information about fetched item
+ */
+ HBufC* iData;
+
+ TInt iMaxLengthOfIcons;
+
+ /**
+ * Current filter applied to the engine contact list model
+ */
+ TEnumsPC::TFilterType iFilter;
+
+ /**
+ * Default filter applied to the engine
+ */
+ TEnumsPC::TFilterType iDefaultFilter;
+
+ /**
+ * Current filter applied to the single list view array
+ */
+
+ TEnumsPC::TFilterType iSingleListArrayFilter;
+
+
+ // This callback is required when ever the server is added or deleted
+ // we get a callback and update the singlelist
+
+ // We own this pointer
+ CIMPSSAPSettingsStore* iSAPSettingsStore;
+
+
+ TInt iPToPChatCount;
+ MCASingleListViewCB* iSingleViewCB;
+
+ TCAItemDetails iItemDetails;
+
+ // Owns. Array of group data
+ CCAGroupListArrayPC* iGroupArray;
+
+ // Does not own. Pointer to Stored Groups Interface
+ MCAStoredGroups* iChatGroups;
+
+ //To track the deletion of stored groups and then the subsequent
+ //addition of groups after logging in each time.
+ TBool iGroupCountDown;
+ // we own this pointer
+ //holds the last logged in user id
+ HBufC* iLastloggedinUserId;
+
+ //Count of all the save Groups to track the Open Count count on login
+ TInt iOnlySavedGroups;
+
+ /**
+ * list of open chats items here
+ */
+ RPointerArray<MCAArrayItemPC> iOpenChatsArray;
+
+ //Beginning index of Non-Joined groups in iOpenChatsArray
+ TInt iOpenChatsInActiveIndex;
+ MCASyncObserverPC* iSyncObserver;
+
+
+ // Own this Pointer, as constrution of which fires an event to PEC engine
+ CIMPSPresenceConnectionUi *iConnectionUI;
+
+
+ // store the Contact's userId which need to refresh after contact list fetching complete.
+ RPointerArray<HBufC> iRefreshConvArray;
+
+ };
+
+#endif //CCAMainViewArrayPC_H
+// End of File
\ No newline at end of file