diff -r 000000000000 -r 094583676ce7 wvuing/wvuiave/AppSrc/CCAGroupUtils.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/wvuiave/AppSrc/CCAGroupUtils.h Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,361 @@ +/* +* 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: Group handling utilities +* +*/ + + + +#ifndef CCAGROUPUTILS_H +#define CCAGROUPUTILS_H + +// INCLUDES +#include "MCAInviteConflictResolver.h" +#include "TEnumsPC.h" + +#include +#include + +// FORWARD DECLARATIONS +class MCAViewSwitcher; +class CCAAppUi; +class MCAConversationMessage; +class MCAServerContactsArrayPC; +class MCAGroupPC; +class MCAGroupUtilsPC; +// CLASS DECLARATION + +/** +* Group properties editing and displaying utilities +* +* @lib chatng.app +*/ +class CCAGroupUtils : public CBase, + public MCAInviteConflictResolver + { + public: // constructor + + /** + * Static constructor. + * @param aEngine Handle to application engine + * @param aViewSwitcher General interface for switching chat-client views + * @return Instance of this class + */ + static CCAGroupUtils* NewLC( MCAViewSwitcher& aViewSwitcher ); + + /** + * Destructor + */ + ~CCAGroupUtils(); + + public: + + // simple group generation ("SGC") FSM states + enum TSGCState + { + ESGCInviteContacts = 0, // choose contacts to invite (Begin state) + ESGCGroupName, // select group name + ESGCInviteMessage, // invite message query + ESGCScreenName, // screenname query or alias usage + ESGCCreateGroup, // create the group + ESGCDoSendInvite, // send the invitations, if any + ESGCDoJoin, // actually join the group + ESGCError, // error state + ESGCQueryCancel, // ask for cancelling + ESGCNone // no state + }; + + // Chat group join mode + enum TJoinMode + { + EStoredId = 0, // Group id received from some store + EManualId // Group id entered manually by user + }; + + public: //from MCAInviteConflictResolver + + /** + * @see MCAInviteConflictResolver for details + */ + void ResolveInviteConflictL( const TDesC& aGroup, + CDesCArray& aArray ); + + public: // new methods + + /** + * This method checks if user is admin of the group + * @param aGroupId: id of the group whose admin status has to be checked + * @return ETrue if favourite else EFalse + */ + TBool IsAdmin( const TDesC& aGroupId ) const; + + /** + * Get the User Ids of participants of the group (joined users) + * Makes copies of the descriptors. + * @param aParticipantList - list of all the participants in a group + * @param aGroupID - groupid for which participantlist is required + */ + void GetParticipantsL( CDesCArray& aParticipantList, + const TDesC& aGroupID ) const ; + + /** + * Leave the given group. + * @param aGroupId The group to leave + * @return IMPS error code from LeaveL + */ + TInt LeaveGroupL( const TDesC& aGroupId ); + + /** + * This method displays pop-up list containing joined members + * @param aGroupId The group whose members have to be displayed + */ + void DisplayJoinedMembersL( const TDesC& aGroupId ); + + /** + * Delete the given group + * @param aGroupId The group id of the group to delete + * @return The errorcode + */ + TInt DeleteGroupL( const TDesC& aGroupId ); + + /** + * Find the group name of group with given group id + * @Param aGroupId: group id + * @return : name of the group + */ + TPtrC GetGroupName( const TDesC& aGroupId ) const; + + /** + * Find a group from the store + * @param aGroupId the ID of the group to find + * @return true if group has been found else return false + */ + TBool FindGroup( const TDesC& aGroupId ) const; + + /** + * Saves the focused general chat group as favourite + * @param aGroupId: id of the group which has to be saved + */ + void SaveAsFavouriteL( const TDesC& aGroupId ); + + /** + * This method checks if group is favourite + * @param aGroupId: id of the group whose favorite status has to be checked + * @return ETrue if favourite else EFalse + */ + TBool IsFavouriteChatGroup( const TDesC& aGroupId ); + + /** + * This method checks if the user has joined to the group + * @param aGroupId: id of the group whose joined status has to be checked + * @return ETrue if joined else EFalse + */ + TBool IsJoinedToGroup( const TDesC& aGroupId ); + + /** + * This method checks if group owned(created) by the user + * @param aGroupId: id of the group whose owner status has to be checked + * @return ETrue if owned else EFalse + */ + TBool IsOwnGroup( const TDesC& aGroupId ) const; + + /** + * Launch chat group properties editor + * @param aGroupId GroupID for target group + */ + TInt EditChatGroupPropertiesL( const TDesC& aGroupId ); + + /** + * Launch chat group properties editor and create new chat + * @param aResourceId Resource id for title text + * @param aViewId ViewId of current view + * @param aContactListID - invitation should be sent to all + * online contacts of this list. aContactListID should be null + * if focus was not on a contact list in singlelist view + * @return WVID of newly created group or NULL if not successful + * The ownership is passed to calling function! + */ + HBufC* CreateNewChatL( TInt aResourceId, const TUid aViewId, + TBool aContactFound, + TEnumsPC::TListSelectionType aSelType = TEnumsPC::EMultiSelect, + TInt aSelectedListIndex = 0 ); + + /** + * Joins the specified chat group and switches the view + * @param aGroupId GroupID + * @param aScreenName Default screenname for query + * @param aFwdMessage Forwarded message. + * @param aJoinMode Is group id entered manually by user + * or received from some storage. + * @return Return value of real join-request + */ + TInt JoinGroupL( const TBool aFromFwd, + const TDesC& aGroupId, + const TDesC& aScreenName = KNullDesC, + const MCAConversationMessage* aFwdMessage = NULL, + TJoinMode aJoinMode = EStoredId ); + + /** + * Switches to joined group + * @param aGroupID GroupID + * @param aFwdMessage forwarded message + * @param aInviteQuery If ETrue, launch the invite query + */ + void SwitchToJoinedGroupL( const TBool aFromFwd, + const TDesC& aGroupID, + const MCAConversationMessage* aFwdMessage = NULL, + TBool aInviteQuery = EFalse ); + + /** + * Displays a delete query of user created chat rooms + */ + TInt DisplayCreatedChatRoomsListL(); + + /** + * Displays chat room info dialog + * @param aGroupId GroupID + */ + void DisplayChatInfoL( const TDesC& aGroupId ); + + /** + * Do the asynchronous joining process via CAsyncCallBack. + * Uses iErr, iAsync* variables. + */ + TInt DoAsyncJoin(); + + /** + * Helper method for querying the screen name or alias. + * Uses variation to determine the default value. + * @param aScreenName Pointer to the screen name buffer + */ + TInt ScreenNameQueryL( TDes& aScreenName ); + + /** + * Helper method for switching back to the view again + * @param aGroupID + * @param aPrevView View where to switch when pressing back + * @param aNextView View which is switched to next + */ + void PrepareToSwitchBackL( const TDesC& aGroupID, + TUid aPrevView, + TUid aNextView ); + TPtrC GetJoinGroupID(); + + private: // new methods + + /** + * Helper Asks screen name + * @param aScreenName Reference to a descriptor where + * screen name will be stored. + * @return EAknSoftkey enumeration + */ + TInt AskScreenNameL( TDes& aScreenName ); + + /** + * Launch chat group properties editor and create new chat, + * the normal style (with access and editor lists, etc.) + * @param aResourceId Resource id for title text + * @param aViewId ViewId of current view + * @return WVID of newly created group or NULL if not successful + * The ownership is passed to calling function! + */ + HBufC* CreateNewChatNormalL( TInt aResourceId, const TUid aViewId ); + + /** + * Launch chat group properties editor and create new chat, + * simplified version. + * @param aResourceId Resource id for title text + * @param aViewId ViewId of current view + * @param aContactListID listid for which the list of online contacts is required + * for sending invitations + * @return WVID of newly created group or NULL if not successful + * The ownership is passed to calling function! + */ + HBufC* CreateNewChatSimpleL( TInt aResourceId, const TUid aViewId, + TBool aContactFound, + TEnumsPC::TListSelectionType aSelType, + /*MCAServerContactsArrayPC* aOnlineContacts = NULL*/ + TInt aSelectedListIndex = 0 ); + + /** + * FSM state change logic wrapper. + * @param aAknResult The result from user query (Avkon enum), + * to handle Cancels + * @param aErrorCode The network error code from previous operation, if + * any. Use KErrNone to force skipping of error state transition. + * @param aNewState The new state to change to when successful + */ + void StateChange( TInt aAknResult, TInt aErrorCode, + TSGCState aNewState ); + + private: // constructors and destructors + + /** + * constructor + */ + void ConstructL(); + + /** + * Default constructor + * @param aEngine Handle to engine + * @param aViewSwitcher Handle to view switcher + */ + CCAGroupUtils( MCAViewSwitcher& aViewSwitcher ); + + private: // Data + + // Doesn't own. Handle to appui + CCAAppUi* iAppUi; + + // Handle to view switcher + MCAViewSwitcher& iViewSwitcher; + + // Owns. Used temporarily in CreateNewChatL. + HBufC* iGroupId; + HBufC* iJoinGroupId; + // error for asynchronous group joining + TInt iErr; + + // leave error for asynchronous group joining + TInt iAsyncLeave; + + // parameters used with asynchronous group joining: group id and group name + HBufC* iAsyncGroupId; + HBufC* iAsyncScreenName; + + // Not owned. ref to forwarded message. + const MCAConversationMessage* iAsyncFwdMessage; + + // Members are required for asynchronous call call backs + CAsyncCallBack* iAsyncCb; + CActiveSchedulerWait iWait; + + // simplified group creation FSM stuff + TSGCState iCurrState; // current state for FSM + TSGCState iPrevState; // previous state for FSM + TInt iNwError; // error from network + + // Screen name + TPtr iScreenNamePtr; + + //Doesnt own. Pointer to group process component. + MCAGroupPC* iGroupPC; + + //Doesnt Own. Pointer to group utils process component + MCAGroupUtilsPC* iGroupUtilsPC; + }; + +#endif // CCAGROUPUTILS_H + +// End of File