diff -r 000000000000 -r 094583676ce7 wvuing/wvuiprocess/Inc/CCAMainViewArrayPC.h --- /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