phonebookengines/VirtualPhonebook/VPbkSimStoreImpl/inc/CStoreBase.h
changeset 0 e686773b3f54
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookengines/VirtualPhonebook/VPbkSimStoreImpl/inc/CStoreBase.h	Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,496 @@
+/*
+* Copyright (c) 2002-2007 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:  The base class for sim stores
+*
+*/
+
+
+
+#ifndef VPBKSIMSTOREIMPL_CSTOREBASE_H
+#define VPBKSIMSTOREIMPL_CSTOREBASE_H
+
+//  INCLUDES
+#include <e32base.h>
+#include <etelmm.h>
+#include "MVPbkSimCntStore.h"
+#include "VPbkSimStoreCommon.h"
+#include "MVPbkSimCommandObserver.h"
+#include "MVPbkSimContactObserver.h"
+#include <MVPbkSimPhoneObserver.h>
+#include "MSimRefreshObject.h"
+#include "METelStoreNotificationObserver.h"
+#include "MBtSapObserver.h"
+#include "CContactArray.h" // MContactArrayObserver
+
+// FORWARD DECLARATIONS
+class RMobilePhoneStore;
+class MVPbkSimCommand;
+class CVPbkSimCommandStore;
+class CVPbkSimStateInformation;
+class CVPbkSimFieldTypeFilter;
+template <class MVPbkSimStoreObserver> class CVPbkAsyncObjectOperation;
+class CVPbkSimContactView;
+
+namespace VPbkSimStoreImpl {
+
+// DATA TYPES
+enum TStoreState
+    {
+    /// Store is not open
+    EStoreNotOpen,
+    /// Store is opening, init command is running
+    EStoreIsOpening,
+    /// Store is open
+    EStoreOpen,
+    /// Store is not available, e.g SAT refresh can cause this.
+    EStoreNotAvailable
+    };
+
+// FUNCTION PROTOTYPES
+TUint32 ConvertETelStoreCaps( TUint32 aETelStoreCaps );
+
+// FORWARD DECLARATIONS
+class CPhone;
+class CContactArray;
+class CETelStoreNotification;
+class CSimPhoneNumberIndex;
+class CSatRefreshNotifier;
+class TStoreParams;
+class CBtSapNotification;
+class CCompositeCmdBase;
+class CSharedViewArray;
+
+// CLASS DECLARATION
+
+/**
+*  The base class for sim stores
+*
+*/
+NONSHARABLE_CLASS(CStoreBase) : public CBase,
+                   public MVPbkSimCntStore,
+                   public METelStoreNotificationObserver,
+                   public MSimRefreshObject,
+                   protected MVPbkSimCommandObserver,
+                   protected MContactArrayObserver,
+                   private MBtSapObserver
+    {
+    public:  // Constructors and destructor
+        
+        /**
+        * Destructor.
+        */
+        virtual ~CStoreBase();
+
+    public: // New functions
+
+        /**
+        * Returns the ETel name of the store
+        * @return Returns the ETel name of the store
+        */
+        virtual const TDesC& ETelName() const = 0;
+        
+        /**
+        * Returns the ETel base store
+        * @return the ETel base store
+        */
+        virtual RMobilePhoneStore& ETelStoreBase() = 0;
+                
+        /**
+        * Returns the ETel phonebook information structure
+        * Sub class must have the info as a member.
+        * @return the ETel phonebook information structure
+        */
+        virtual RMobilePhoneStore::TMobilePhoneStoreInfoV1& ETelStoreInfo() = 0;
+        
+        /**
+        * Returns the ETel phonebook information structure package
+        * Sub class must have the info and the info package as a member.
+        * @return the ETel phonebook information structure package
+        */
+        virtual TDes8& ETelStoreInfoPackge() = 0;
+        
+        /**
+        * Creates a command to initialize store.
+        * @param aObserver the observer for the command
+        */
+        virtual MVPbkSimCommand* CreateInitCommandL( 
+            MVPbkSimCommandObserver& aObserver ) = 0;
+
+        /**
+        * Creates a command to update a contact from ETel
+        * @param aSimIndex the index of the changed sim contact
+        */
+        virtual MVPbkSimCommand* CreateUpdateCommandL( TInt aSimIndex ) = 0;
+        
+        /**
+        * Creates a command to update a contact from ETel. Uses a reference to
+        * the sim index. Client must update the index before the command is executed
+        * @param aSimIndex a reference to the index of the changed sim contact
+        */
+        virtual MVPbkSimCommand* CreateUpdateCommandUsingRefL( 
+            TInt& aSimIndexRef ) = 0;
+        
+        /**
+        * Called after store has been refreshed due to SAT refresh. The store
+        * implementation must completed the refresh with correct parameters.
+        *
+        * @param aSimRefreshCompletion the refresh to complete
+        */
+        virtual void CompleteSATRefresh( 
+            MSimRefreshCompletion& aSimRefreshCompletion ) = 0;
+        
+        /**
+        * Called in the beginning of the OpenL. The subclass should overwrite
+        * this and not OpenL itself.
+        * Default implelention returns ETrue
+        * @return EFalse if the store can not be opened. The state
+        *                will be set to EStoreNotAvailable in that case
+        */
+        virtual TBool AllowOpeningL();
+        
+        /**
+        * Returns the contact array
+        * @return the contact array
+        */
+        inline CContactArray& Contacts();
+
+        /**
+        * Returns the ETel notification instance if the ETel store
+        * supports notification. The ownership of the instance is not given.
+        * @return the ETel notification reference or NULL
+        */
+        inline CETelStoreNotification* ETelNotification() const;
+        
+        /**
+        * Returns SIM state information
+        *
+        * @return SIM state information
+        */
+        inline CVPbkSimStateInformation& SimStateInformation() const;
+
+    public: // Functions from base classes
+
+        /**
+        * From MVPbkSimCntStore
+        */
+        TVPbkSimStoreIdentifier Identifier() const;
+
+        /**
+        * From MVPbkSimCntStore
+        * 
+        * Must be called from the sub class if it overwrites this.
+        * It's better to overwrite AllowOpeningL than this.
+        * Behavior:
+        *   EStoreNotOpen: starts constructing the store
+        *   EStoreIsOpening: does nothing
+        *   EStoreOpen: sends store ready event to observer
+        *   EStoreNotAvailable: sends store unavailable event to observer
+        */
+        void OpenL( MVPbkSimStoreObserver& aObserver );
+
+        /**
+        * From MVPbkSimCntStore
+        *
+        * Must be called from the sub class if it overwrites this
+        */
+        void Close( MVPbkSimStoreObserver& aObserver );
+
+        /**
+        * From MVPbkSimCntStore
+        */
+        MVPbkSimCntView* CreateViewL( 
+            const RVPbkSimFieldTypeArray& aSortOrder,
+            TVPbkSimViewConstructionPolicy aConstructionPolicy,
+            const TDesC& aViewName,
+            CVPbkSimFieldTypeFilter* aFilter );
+        
+        /**
+        * From MVPbkSimCntStore
+        */
+        const TDesC8* AtL( TInt aSimIndex );
+        
+        /**
+        * From MVPbkSimCntStore
+        */
+        virtual const MVPbkSimContact* ContactAtL( TInt aSimIndex );
+        
+        /**
+        * From MVPbkSimCntStore
+        */
+        const CVPbkETelCntConverter& ContactConverter() const;
+        
+        /**
+        * From MVPbkSimCntStore
+        */
+        MVPbkSimStoreOperation* CreateMatchPhoneNumberOperationL( 
+            const TDesC& aPhoneNumber, TInt aMaxMatchDigits, 
+            MVPbkSimFindObserver& aObserver );
+        
+        /**
+        * From MVPbkSimCntStore
+        */
+        MVPbkSimStoreOperation* CreateFindOperationL( 
+            const TDesC& aStringToFind, RVPbkSimFieldTypeArray& aFieldTypes,
+            MVPbkSimFindObserver& aObserver );
+        
+        /**
+        * From MVPbkSimCntStore
+        */
+        TInt SystemPhoneNumberMaxLength() const;
+        
+        /**
+        * From METelStoreNotificationObserver
+        */
+        TBool ETelStoreChanged( TInt aSimIndex, TUint32 aEvents );
+
+        /**
+        * From METelStoreNotificationObserver
+        */
+        TBool ETelStoreChangeError( TInt aError );
+        
+        /**
+        * From MContactArrayObserver
+        */
+        void ContactAdded( MVPbkSimContact& aSimContact );
+
+        /**
+        * From MContactArrayObserver
+        */
+        void ContactRemoved( MVPbkSimContact& aRemovedContact );
+        
+        /**
+        * From MContactArrayObserver
+        */
+        void ContactChanged( MVPbkSimContact& aOldContact,
+            MVPbkSimContact& aNewContact );        
+        
+    protected:  // New functions
+        
+        /**
+        * Returns the phone subsession
+        * @return the phone
+        */
+        inline CPhone& Phone();
+        
+        /**
+        * Returns the command store
+        * @return the command store
+        */
+        inline CVPbkSimCommandStore& CommandStore();
+        
+        /**
+        * Returns the current state of the store
+        * @return the current state of the store
+        */
+        inline TStoreState CurrentState();
+        
+        /**
+        * Cancels all requests. Must be called from
+        * the subclass destructor before closing any ETel sessions.
+        */
+        void CancelRequests();
+
+        /**
+        * Subclasses can call this to add an GetInfo command to the
+        * command chain.
+        * @param aCmdChain the command chain created by the subclass
+        */
+        void AddGetInfoCmdToChainL( CCompositeCmdBase& aCmdChain );
+        
+        /**
+        * Resets this store
+        */
+        void ResetStore();
+
+        /**
+        * Starts initializing store
+        */
+        void ConstructStoreL();
+        
+        /**
+        * Sends store ready event to all observers
+        * Sets store state to EStoreOpen
+        */
+        void SendStoreReadyEvent();
+        
+        /**
+        * Sends store unavailable event to all observers
+        * Sets store state to EStoreNotOpen
+        */
+        void SendStoreUnavailableEvent();
+        
+        /**
+        * Sends store error event to all observers
+        * Sets store state to EStoreNotOpen
+        */
+        void SendStoreErrorEvent(TInt aError);
+        
+    protected:  // Functions from base classes
+
+        /**
+        * From MVPbkSimCommandObserver
+        */
+        void CommandDone( MVPbkSimCommand& aCommand );
+
+        /**
+        * From MVPbkSimCommandObserver
+        */
+        void CommandError( MVPbkSimCommand& aCommand, TInt aError );
+
+        /**
+        * From MSimRefreshObject
+        */
+        void SimRefreshed( TUint32 aSimRefreshFlags,
+            MSimRefreshCompletion& aSimRefreshCompletion );
+
+        /**
+        * From MSimRefreshObject
+        */
+        TBool AllowRefresh( TUint32 aSimRefreshFlags );
+        
+        /**
+        * From MSimRefreshObject
+        */
+        TUint32 ElementaryFiles();
+        
+        /**
+        * From MBtSapObserver
+        */
+        void BtSapActivated();
+
+        /**
+        * From MBtSapObserver
+        */
+        void BtSapDeactivated();
+        
+        /**
+        * From MBtSapObserver
+        */
+        void BtSapNotificationError( TInt aError );
+    
+    protected:  // Construction
+
+        /**
+        * C++ constructor.
+        * @param aParams store parameters
+        */
+        CStoreBase( TStoreParams& aParams );
+
+        /**
+        * By default Symbian 2nd phase constructor is private.
+        */
+        void ConstructL();
+        
+    private:    // New functions
+
+        /**
+        * Opens the ETel store sub sub session.
+        * Subclasses must overwrite this to open the store
+        */
+        virtual void OpenETelStoreL() = 0;
+
+        /**
+        * Closes the ETel store
+        */
+        virtual void CloseETelStore() = 0;
+    
+    private:    // Implementation
+        
+        /// Construction after contacts are read
+        void PostConstructStoreL();
+        /// Handles the store event. Creates an update command.
+        void HandleStoreEventL( TInt aSimIndex );
+        /// Handles bluetooth SIM access profile dactivation
+        void HandleBtSapDeactivationL();
+        /// A function called by iOpenOp
+        void DoStoreOpenCallbackL( MVPbkSimStoreObserver& aObserver );
+        /// A function called by iOpenOp
+        void DoStoreUnavailableCallbackL( MVPbkSimStoreObserver& aObserver );
+        /// A function called by iOpenOp
+        void DoStoreErrorCallback( MVPbkSimStoreObserver& aObserver, 
+                TInt aError );
+    
+    private:    // Data
+        /// The identifier of the store
+        TVPbkSimStoreIdentifier iIdentifier;
+        /// a phone subsession for the store
+        CPhone& iPhone;
+        /// Ref: a SAT refresh notifier
+        CSatRefreshNotifier& iSatNotifier;
+        /// Ref a bluetooth SIM access profile notifier
+        CBtSapNotification& iBtSapNotifier;
+        /// Ref: SIM state information
+        CVPbkSimStateInformation& iSimStateInfo;
+        /// Ref: an observer for the store
+        RPointerArray<MVPbkSimStoreObserver> iStoreObservers;
+        /// Own: a command store that handles lifetime of the commands
+        CVPbkSimCommandStore* iCmdStore;
+        /// Own: the array of contacts
+        CContactArray* iContactArray;
+        /// Own: the ETel store notication for updating store
+        CETelStoreNotification* iETelNotification;
+        /// The state of the store;
+        TStoreState iStoreState;
+        /// Own: an async call back support
+        CVPbkAsyncObjectOperation<MVPbkSimStoreObserver>* iOpenOp;
+        /// Own: a phone number index for fast matching
+        CSimPhoneNumberIndex* iPhoneNumberIndex;
+        /// Own: a contact converter
+        CVPbkETelCntConverter* iCntConverter;
+        /// An array of shared views.
+        CSharedViewArray* iSharedViewArray;
+        /// Ref: SAT refresh completion
+        MSimRefreshCompletion* iSimRefreshCompletion;
+        /// Ref: The system max phone number length defined by Phonebook
+        TInt iSystemMaxPhoneNumberLength;
+        /// The flag judge whether the BtSap is activeted.
+        TBool iIsBtSapActivated;
+    };
+
+// INLINE FUNCTIONS
+inline CContactArray& CStoreBase::Contacts()
+    {
+    return *iContactArray;
+    }
+
+inline CETelStoreNotification* CStoreBase::ETelNotification() const
+    {
+    return iETelNotification;
+    }
+
+inline CVPbkSimStateInformation& CStoreBase::SimStateInformation() const
+    {
+    return iSimStateInfo;
+    }
+    
+inline CPhone& CStoreBase::Phone()
+    {
+    return iPhone;
+    }
+
+inline CVPbkSimCommandStore& CStoreBase::CommandStore()
+    {
+    return *iCmdStore;
+    }
+
+inline TStoreState CStoreBase::CurrentState()
+    {
+    return iStoreState;
+    }
+
+} /// namespace VPbkSimStoreImpl
+
+#endif  // VPBKSIMSTOREIMPL_CSTOREBASE_H
+            
+// End of File