diff -r 000000000000 -r 094583676ce7 wvuing/wvuieng/EngSrc/CCABlockingManager.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/wvuieng/EngSrc/CCABlockingManager.h Thu Dec 17 08:41:52 2009 +0200 @@ -0,0 +1,424 @@ +/* +* Copyright (c) 2002-2005 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: Blocking manager handles the blocking and granting + * +*/ + + +#ifndef CCABLOCKINGMANAGER_H +#define CCABLOCKINGMANAGER_H + +// INCLUDES +#include "MCABlocking.h" +#include "MCAImpsImClient.h" +#include "MCASettingsObserver.h" +#include "MCASettings.h" +#include "TStorageManagerGlobals.h" +#include "PublicEngineDefinitions.h" +#include "PrivateEngineDefinitions.h" +#include "MCABackgroundTask.h" +#include "mcastoredcontactsobserver.h" + +#include "ImpsImCli.h" + +#include + +// FORWARD DECLARATIONS +class CCARequestMapper; +class MCAStoredContacts; +class MCAImpsFactory; + +// CLASS DECLARATION + +/** + * Blocking manager handles the blocking and granting + * ( user ) operations. + * + * @lib CAEngine.lib + * @since 1.2 + */ +class CCABlockingManager : public CBase, + public MImpsBlockingHandler2, + public MCABlocking, + public MCASettingsObserver, + public MCABackgroundTask, + public MCAStoredContactsObserver + { + + private: // internal enumerations + + // internal states for blocking manager + enum TBlockingMgrState + { + // normal operation + EStateNormal = 0, + + // deleting of grant list, response to request needs to + // be handled differently + EStateDeletingGrantList + }; + + public: + + /** + * Static constructor. + * @param aImpsImServer is the API to the blocking services. + * @param aRequestMapper is the pointer to the request mapper. + * Used in mapping requests to responses. + * @param aSettingsManager The settings API + */ + IMPORT_C static CCABlockingManager* NewL( + MCAImpsFactory* aIMPSFactory, + CCARequestMapper* aRequestMapper, + MCASettings* aSettingsManager + ); + + /** + * Virtual Destructor. + */ + IMPORT_C virtual ~CCABlockingManager(); + + protected: // Inherited from MCABlocking + + /** + * From MCABlocking + * @see MCABlocking::SetAppUiExitFlag. + */ + void SetAppUiExitFlag( TBool aFlag ); + + /** + * From MCABlocking + * @see MCABlocking::GetBlockedListFromServerL. + */ + TInt GetBlockedListFromServerL(); + + /** + * From MCABlocking + * @see MCABlocking::BlockedList. + */ + const CDesCArray* BlockedList(); + + /** + * From MCABlocking + * @see MCABlocking::InsertL. + */ + TInt InsertL( const CDesCArray* aBlockList, + const CDesCArray* aGrantList, + TBool aForceUpdate = EFalse ); + + /** + * From MCABlocking + * @see MCABlocking::RemoveL. + */ + TInt RemoveL( const CDesCArray* aBlockList, + const CDesCArray* aGrantList, + TBool aForceUpdate = EFalse ); + + /** + * From MCABlocking + * @see MCABlocking::IsContactBlocked + */ + TBool IsContactBlocked( const TDesC& aContact, + TBool aUseGrant = EFalse ) const; + + /** + * From MCABlocking + * @see MCABlocking::ContactListChangedL + */ + void ContactListChangeL( TBool aUpdateInProgress ); + + /** + * From MCABlocking + * @see MCABlocking::SetTemporaryGrantL + */ + TInt SetTemporaryGrantL( const TDesC& aContact, TBool aOn ); + + + protected: // from MImpsBlockingHandler + + /** + * Handle response to getblockedlist request. + * @param aBlockedList list of blocked users. + * @param aBlockedListInUse is blocked list use or not. + * @param aGrantedList list of granted users. + * @param aGrantedListInUse is granted list use or not. + */ + virtual void GetBlockedListResponseL( + const MDesCArray* aBlockedList, + TBool aBlockedListInUse, + const MDesCArray* aGrantedList, + TBool aGrantedListInUse, + TImpsCspIdentifier& aCspId ); + + /** + * Server call back for handling successful operation requests. + * @param aOperationId to map responses to the requests. + * @param aStatus error code. KErrNone if successful. + */ + virtual void HandleCompleteL( + TInt aOperationId, + TImpsCspIdentifier& aCspId ); + + protected: // From MCASettingsObserver + + /** + * Handles setting changes. + * @param aChangedSettingEnum specifies the changed setting. + * @since 2.1 + */ + void HandleSettingsChangeL( TInt aChangedSettingEnum ); + + protected: //From MCABackgroundTask + + /** + * This is the place where Block/GrantList synchronisation is started + * after getting online event + * @param aSubTask is the number of subtask, its counting down + * @see MCABackgroundTask::HandleBackgroundTaskL + */ + void HandleBackgroundTaskL( TInt aSubTask ); + + protected: // From MCAStoredContactsObserver + + /** + * @see MCAStoredContactsObserver + */ + void HandleContactDelete( const TDesC& aContactId ); + + /** + * @see MCAStoredContactsObserver + */ + void HandleAddition( MCAContactList& aList, MCAStoredContact& aContact ); + + /** + * @see MCAStoredContactsObserver + */ + void HandleChange( MCAContactList* aList, + MCAStoredContact* aContact, + TStorageManagerGlobals::TCAObserverEventType aEventType, + TBool aUserIdChanged ); + + public: // new methods + + /** + * If network state changes, BlockingManager state should be updated + * by calling this method. + * @param aState New state. + * @param aUseGrant ETrue if grant list can be used. + */ + void HandleNetworkStateChange( TNetworkState aState, + TBool aCanUseGrant ); + + private: // new methods + + /** + * Does the actual handling + */ + virtual void DoGetBlockedListResponseL( + const MDesCArray* aBlockedList, + TBool aBlockedListInUse, + const MDesCArray* aGrantedList, + TBool aGrantedListInUse ); + + /** + * Does the actual handling + */ + virtual void DoHandleCompleteL( + TInt aOperationId, + TInt aStatus ); + + /** + * Evaluate current grantlist handling strategy + * @return ETrue if grant list is in use + */ + TBool GrantListInUse(); + + /** + * Clear the current grant list. Used internally when + * strategy is to allow nobody. + */ + void ClearGrantListL( TBool aForceUpdate = EFalse ); + + /** + * Add given wv id to the internal block list + * @param aId The wv id + */ + void AddToBlockListL( const TDesC& aId ); + + /** + * Remove given wv id from the internal block list + * @param aId The wv id + */ + void RemoveFromBlockList( const TDesC& aId ); + + /** + * Check if given wv id is in the internal block list + * @param aId The wv id + * @return ETrue if the contact is in the list (is blocked) + */ + TBool InternallyBlocked( const TDesC& aId ) const; + + /** + * Add all friends to the internal grant list + * @param aDoNotIncludeList, List of items which we do not want to + * include from contact list. + */ + void GrantFriendsL( CDesCArray* aDoNotIncludeList = NULL ); + + /** + * Insert or remove to grant or block list. + * Leaves with KErrArgument if aRequest is not EBlockRequest + * or EUnBlockRequest. + * @param aInsertBlockList WV IDs to be inserted to blocklist. + * @param aRemoveBlockList WV IDs to be removed from blocklist. + * @param aInsertGrantList WV IDs to be inserted to grantlist. + * @param aRemoveGrantList WV IDs to be removed from grantlist. + * @param aAdditionalData A pointer to an array which is set to + * CCARequest as additional data. + * @param aRequest Request type, either block or unblock request. + * @return error code. + */ + TInt DoBlockRequestL( const CDesCArray* aInsertBlockList, + const CDesCArray* aRemoveBlockList, + const CDesCArray* aInsertGrantList, + const CDesCArray* aRemoveGrantList, + const CDesCArray* aAdditionalData, + TOperationRequests aRequest ); + + /** + * Checks if contacts is granted or not + * @since 2.1 + * @param aContactId, contact which is checked + * @return ETrue if granted, EFalse if not. + */ + TBool IsContactGranted( const TDesC& aContact ) const; + + /** + * Creates the CDesCArray from the source. + * Ownership is transferred to caller! + * @since 2.1 + * @param aSource Array to be copied + * @return Array containing the same elements as source array + */ + static CDesCArray* CloneArrayLC( const MDesCArray& aSource ); + + /** + * Creates the CDesCArray containing the items from arrayDiff that + * are not on arrayTest + * Ownership is transferred to caller! + * @since 2.1 + * @param aArrayDiff Array whose differences are copied + * @param aArrayTest Array to be tested on + * @return Array containing the differences + */ + static CDesCArray* CreateNeutralDiffLC( const MDesCArray& aArrayDiff, + const MDesCArray& aArrayTest ); + + + + /** + * Check if InsertL/RemoveL should be processed or not. + * @since 2.1 + * @param aBlockList, List of wvids to block + * @param aGrantList, List of wvids to grant + * @param aForceUpdate Force update (ETrue) or not + * @return ETrue, if update is needed. + */ + TBool NeedUpdate( const CDesCArray* aBlockList, + const CDesCArray* aGrantList, + TBool aForceUpdate ); + + /** + * Add contacts to granted list. + * @param aInsertArray. Array of contacts to be + * inserted to granted list. + */ + void AddToGrantedListL( const MDesCArray& aInsertArray ); + + /** + * Remove contacts from granted list and modify removeArray + * @param aRemoveArray Array of contacts to be removed. + * Remove those contacts from aRemoveArray which + * are not meant to be deleted. For example: + * Those which are still in other lists. + */ + void RemoveFromGrantedList( CDesCArray& aRemoveArray ); + + private: // constructors and destructors + + /** + * Default constructor. + * @param aStorage is the pointer to the storage side. Used in updating + * flags etc. + * @param aImpsImServer is the API to the server side. + * @param aRequestMapper is the pointer to the request mapper. + * Used in mapping requests to responses. + */ + CCABlockingManager( + MCAImpsFactory* aIMPSFactory, + CCARequestMapper* aRequestMapper, + MCASettings* aSettingsManager ); + + /** + * ConstructL method. + */ + void ConstructL(); + + private: // Data + + // Doesn't own. Pointer to the IMPS interface factory. + MCAImpsFactory* iImpsFactory; + + // Doesn't own. Pointer to the request mapper. + CCARequestMapper* iRequestMapper; + + // doesn't own, pointer to settings API + MCASettings* iSettingsManager; + + // Owns. List of blocked users, returned via BlockedList + CDesCArrayFlat* iBlockedList; + + // Owns. List of granted users, returned via BlockedList + CDesCArrayFlat* iGrantedList; + + // Maps the GetBlockedListFromServerL to GetBlockedListResponseL. + TInt iGetBlockedListOpId; + + // Flag to tell if background tasks are run or not. + TBool iBackgroundTaskReady; + + // handle to contacts list interface + MCAStoredContacts* iStoredContacts; // not owned + + // the used granting strategy + MCASettings::TCASettingValues iStrategy; + + // internal state + TBlockingMgrState iMgrState; + + // Is our list valid + TBool iBlocklistIsValid; + + // Can Grant list be used. + TBool iCanUseGrant; + + // + TBool iUpdateInProgress; + + TBool iLoggedIn; + + TBool iAppUiExit; + }; + +#endif // CCABLOCKINGMANAGER_H