wvuing/wvuieng/EngSrc/CCABlockingManager.h
changeset 0 094583676ce7
--- /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 <e32base.h>
+
+// 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