--- a/srsf/nssvascontacthdlr/src/nssvasccontacthandlerimpl.h Thu Aug 19 09:56:14 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,846 +0,0 @@
-/*
-* Copyright (c) 2004-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: VAS contact handler implementation
-*
-*/
-
-
-#ifndef NSSCONTACTHANDLERIMPL_H
-#define NSSCONTACTHANDLERIMPL_H
-
-// INCLUDES
-#include <cenrepnotifyhandler.h>
-
-#include <vasmcontactobserver.h>
-
-#include <nssvasmgetcontextclient.h>
-#include <nssvasmgettagclient.h>
-#include <nssvasmtraintexteventhandler.h>
-#include <nssvasmdeletecontextclient.h>
-#include <nssvasmdeletetagclient.h>
-#include <nssvasmsavetagclient.h>
-#include <nssvasmsavecontextclient.h>
-#include "nssvasdatasyncwatcher.h"
-#include <nssvascoreconstant.h>
-#include "srsfbldvariant.hrh"
-
-// Publish & Subscribe of the contact handler activity
-#include <e32property.h>
-
-#include <PbkFields.hrh>
-
-// CONSTANTS
-
-// Number of restart timer calls checked during periodic calls check
-const TInt KEventMomentsSize = 3;
-
-// MACROS
-// Deprecated
-#ifdef TEST_MANUAL_SYNC
-#define CNssContactHandler CManualContactHandler
-#endif // TEST_MANUAL_SYNC
-
-// FORWARD DECLARATIONS
-class CNssTrainingParameters;
-class MVasBasePbkHandler;
-class CNssVASDBMgr;
-class MNssTagMgr;
-class MNssContextMgr;
-class CSuccessfulDeletionSimulator;
-class CRepository;
-class CNssChBackupObserver;
-
-// CLASS DECLARATION
-
-/**
-* TNssContextClientData contains last last sync time and UI language
-* which was used when training voice tags.
-*
-* @lib NssVASContactHdlr.dll
-* @since 2.8
-*/
-struct TNssContextClientData
- {
- TTime iLastSyncTime;
- TLanguage iLanguage;
- TContactSyncId iContactSyncId;
-
- void InternalizeL(const TDesC8& aBuffer)
- {
- iLastSyncTime = 0;
- iLanguage = ELangOther;
- iContactSyncId = KErrNotFound;
-
- if ( (TUint)aBuffer.Size() > sizeof( TNssContextClientData ) )
- {
- User::Leave( KErrCorrupt );
- }
-
- Mem::Copy( this, aBuffer.Ptr(), sizeof( TNssContextClientData ) );
- }
-
- void ExternalizeL(TDes8& aBuffer)
- {
- if ( (TUint)aBuffer.MaxSize() < sizeof( TNssContextClientData ) )
- {
- User::Leave( KErrTooBig );
- }
-
- aBuffer.SetLength( 0 );
- aBuffer.Copy( (TUint8*)this, sizeof( TNssContextClientData ) );
- }
- };
-
-/**
-* Contact handler creates voice tags out of phonebook contacts and keeps
-* SIND data in sync with the phonebook
-*
-* @lib NssVASContactHdlr.dll
-* @since 2.8
-*/
-NONSHARABLE_CLASS( CNssContactHandlerImplementation ): public CBase,
- public MVasContactObserver,
- public MNssGetTagClient,
- public MNssDeleteTagClient,
- public MNssGetContextClient,
- public MNssSaveTagClient,
- public MNssSaveContextClient,
- public MNssTrainTextEventHandler,
- public MNssDeleteContextClient,
- public MNssDataSyncStateObserver,
- public MCenRepNotifyHandlerCallback
- {
- // DATA TYPES
- enum TContactHandlerState
- {
- ECHIdle,
- ECHInitializing,
- // contact addition, removal or change
- ECHHandlingNormalChanges,
- ECHFullResync
- };
-
-
- struct TExtension
- {
- TPbkFieldId iId;
- HBufC* iText;
- TVasExtensionAction iAction;
- TVasExtensionCommand iCommand;
- };
-
- struct TContactData
- {
- // Can be 1.Nickname, 2.firstname-lastname or vise versa, 3.Company name
- HBufC* iTitle;
- TContactItemId iID;
- TTime iSyncTime;
- TVasTagType iType;
- };
-
- public: // Constructors and destructor
-
- /**
- * Two-phased constructor.
- */
- static CNssContactHandlerImplementation* NewL( );
-
- /**
- * Destructor.
- */
- virtual ~CNssContactHandlerImplementation();
- public: // New functions
-
- /**
- * Disables the contact handler until EnableEventHandling is called
- * Typically this means 'until reboot'
- * Is used in case of unrecoverable error.
- *
- * @todo Move to private?
- * @return void
- */
- void DisableEventHandling();
-
- /**
- * Enables the contact handler.
- *
- * @deprecated Move to private?
- * @return void
- */
- void EnableEventHandling();
-
- public: // Functions from base classes
-
- /**
- * Is called by phonebook handler when contact change has occurred
- *
- * @param aEvent Event to be handled
- */
- void HandleEventL( const TPhonebookEvent& aEvent );
-
- /**
- * Is called by tag manager when getting of a tag list is completed
- * successfully
- * From MNssGetTagClient Interface
- *
- * @param aTagList list of tags returned
- * @param aErrorCode KErrNone if getting of tags has been successfull
- * @return void
- */
- void GetTagListCompleted( MNssTagListArray* aTagList, TInt aErrorCode );
-
- /**
- * Called when the deletion of a tag requested from tag manager
- * is completed successfully
- * From MNssDeleteTagClient Interface
- * @param aErrorCode KErrNone if tag deletion has been successfull
- * @return void
- */
- void DeleteTagCompleted( TInt aErrorCode );
-
- /**
- * Called by tag manager, when GetContext() completes successfully
- *
- * Depending on the contact handler state, continues full resync sequence or
- * sets the idle state
- * @param aContext
- * @param aErrorCode KErrNone if getting of context list was successfull
- * @return void
- */
- void GetContextCompleted(MNssContext* aContext, TInt aErrorCode);
-
- /**
- * Callback to indicate GetContext successed.
- * @param aContextList - A list of contexts.
- * user has to ResetAndDestroy() after using the list.
- * @param aErrorCode KErrNone if getting of context list was successfull
- * @return None
- */
- void GetContextListCompleted( MNssContextListArray *aContextList,
- TInt aErrorCode );
-
- /**
- * Is called when SaveContext() completes
- * @param aErrorCode KErrNone if saving of context was successfull
- */
- void SaveContextCompleted( TInt aErrorCode );
-
- /**
- * Callback to indicate taht SaveTag completed successfully
- * @param aErrorCode KErrNone if saving of tag has was successfull
- * @return None
- */
- void SaveTagCompleted( TInt aErrorCode );
-
- /**
- * Is called when data sync status is changed and when data sync state
- * observation was just started
- * @param aRunning ETrue if from now on data sync process is running
- * EFalse otherwise
- * @see MNssDataSyncStateObserver
- */
- void DataSyncStateChanged( TBool aRunning );
-
- /**
- * Is called when backup/restore status is changed and when backup/restore
- * state observation was just started
- * @param aRunning ETrue if some backup/restore action is in progress
- * EFalse otherwise
- * @param aRestoreType ETrue if the event is restore related
- * EFalse if the event is backup related
- * @see CNssChBackupObserver
- */
- void BackupRestoreStateChanged( TBool aRestoreType, TBool aRunning );
-
- /**
- * From MCenRepNotifyHandlerCallback
- * @see MCenRepNotifyHandlerCallback for more information
- */
- void HandleNotifyInt( TUint32 aId, TInt aNewValue );
-
- private:
-
- /**
- * C++ default constructor.
- */
- CNssContactHandlerImplementation( );
-
- /**
- * Second-phase constructor
- */
- void ConstructL();
-
- // Prohibit copy constructor
- CNssContactHandlerImplementation( const CNssContactHandlerImplementation& );
-
- // Prohibit assigment operator
- CNssContactHandlerImplementation& operator= ( const CNssContactHandlerImplementation& );
-
- /**
- * Register itself for phonebook database events
- */
- void RegisterForDatabaseEventsL( );
-
- /**
- * Check if the event was caused by voice tag field adding
- * @param aEvent event from contact db
- * @return ETrue if voice tag field was added
- */
- TBool CausedByVoiceTagAddition( const TPhonebookEvent& aEvent );
-
- /**
- * Get the current contact's title in a buffer
- * @param aContactId Id of the contact to return title for
- * @param aUseDefaultOrder If ETrue created title uses preferred
- * lastname-firstname order of the current UI language. If
- * EFalse, uses reverse order
- * @param aBothFirstAndLastFound Is set to ETrue if returned title
- * contains both first name and last name. To EFalse otherwise
- * @param aTagType Set based on found tag type (name or company name)
- * @return 'Title' of the contact, i.e. value that is pronounced when
- * this contact tag is recognized by SIND
- */
- HBufC* GetContactTitleL( TContactItemId aContactId, TBool aUseDefaultOrder,
- TBool& aBothFirstAndLastFound, TVasTagType& aTagType );
-
- /**
- * Return the nickname for a given contact
- *
- * @exception KErrNotFound if nickname field is not present
- * @param aContactId Phonebook id of the contact in question
- * @return NULL if nickname is present, but empty.
- * Otherwise newly allocated descriptor to the nickname
- */
- HBufC* GetContactNicknameL( TContactItemId aContactId );
-
- /*
- * Returns a flag which tells if name order should be changed.
- * @return ETrue if preferred order of the current UI language is
- * lastname-firstname. EFalse otherwise
- */
- TBool SwapNameOrder();
-
- // Process the Contact Database Events
- void DoHandleEventsL();
-
- /**
- * Routine to handle failure during processing the event at the lower
- * layers
- */
- void DoHandleEventFailedL();
-
- /**
- * Single tag training completed successfully
- */
- void HandleTrainComplete( TInt aErrorCode );
-
- /**************** The functions to handle miscellanious changes ***************/
-
- // Handling miscellaneous changes has 3 phases:
- // 1. Fuse add & remove & change events into a list
- // of tags to be added and tags to be removed.
- // 2. Remove tags to be removed.
- // 3. Add tags to be added
-
-
- /**
- * Fuse add & remove & change events into a list of tags to be added
- * and tags to be removed.
- */
- void CollectAddRemoveListsL();
-
-
- /**
- * Starts adding names: Creates the tags and sends TrainTextL calls.
- */
- void DoAddNamesL();
-
- /**
- * Is called after all the tags scheduled for addition have been
- * trained successfully
- */
- void DoAddNamesTrainingFinished();
-
- /**
- * Initiates saving tags after they have been trained.
- * After saving tags started is recursively called for every next
- * tag to be saved
- */
- void DoAddNamesSaveTag();
-
- /**
- * Is called when single tag saving has been completed
- * @param aError KErrNone if saving was successful,
- * KErrGeneral otherwise
- */
- void DoAddNamesSaveTagCompleted( TInt aError );
-
- /**
- * Cleanup addition-related buffers after new tags have been created,
- * trained and saved.
- * Add voice tag icons to the phonebook
- */
- void DoAddNamesCompletedL();
-
-
- /**
- * Start removing names by requesting list of tags for the first
- * contact scheduled for deletion
- */
- void DoRemoveNamesL();
-
- /**
- * Callback for handling list of tags, that should be deleted
- * The first list is requested from DoRemoveNamesL, other - recursively
- * from DoRemoveNamesAfterGetTagList
- * @param aTagListArray List of tags to be deleted. Can be empty
- */
- void DoRemoveNamesAfterGetTagList( MNssTagListArray* aTagListArray );
-
- /**
- * Send single DeleteTag call to remove the first tag of those that
- * are in the to-be-deleted list from VAS
- * Expects callbacks to DeleteTagCompleted or to DeleteTagFailed
- */
- void DoRemoveNamesCallDeleteTag();
-
- /**
- * DeleteTag() callbacks call this funciton. It counts
- * the number of callbacks, and when all callbacks have arrived
- * goes to the next phase: RemovingNamesCompletedL or
- * DoHandleEventFailedL
- */
- void DoRemoveNamesAfterDeleteTagCompleted();
-
- /**
- * Tag removal for a pack on names completed successfully. Clean the
- * deletion tag buffers
- */
- void RemovingNamesCompletedL();
-
- /**
- * TLinearOrder comparison function for sorting phonebook events
- */
- static TInt PhonebookOrder( const TPhonebookEvent& a1, const TPhonebookEvent& a2 );
-
- /*************** The functions to handle miscellanious changes end ************/
- /**
- * Compares client data from VAS context to the state of the phonebook
- * to find out if full synchronization is needed.
- * Compares client data (saved in VAS context)
- * to state of the phonebook to find out if
- * full synchronization is needed.
- *
- * If full resync is needed initiates it by saving into the event queue
- * special 'full resync event'
- * @since 2.0
- */
- void CheckErrorSigns();
-
- /**
- * Handle errors which happend when updating normal changes
- */
- void NormalChangesHandleError();
-
- /**
- * Start full resynchronisation
- */
- void FullResyncStart();
-
- /**
- * Delete existing context if any, create a new one.
- * Is a part of full resynchronization sequence
- */
- void FullResyncCreateContextL();
-
- /**
- * Simulate phonebook addition events for all the phonebook contacts.
- * Is a part of full resynchronization sequence
- */
- void FullResyncCreateChangesL();
-
- /**
- * Checks if the event queue contains an event, which
- * launches full resynchronization
- * @return ETrue if full resync request is present in the queue
- * EFalse otherwise
- */
- TBool IsFullResyncNeeded();
-
- /**
- * Is called when conext deletion has completed successfully.
- * Is a part of the full synchronization sequence
- * @param aErrorCode KErrNone if deletion of context was successfull
- */
- void DeleteContextCompleted( TInt aErrorCode );
-
- /**
- * Is called when conext deletion fails.
- * Is a part of the full synchronization sequence
- */
- //void DeleteContextFailed( enum MNssDeleteContextClient::TNssDeleteContextClientFailCode );
-
- /**
- * Static callback required by Symbian Timer services.
- * Real action happens in the DoPeriodicCallback
- * @param pX Pointer to the active instance of CNssContactHandlerImplementation
- * @return KErrNone. Has no meaning in this case
- * @see CNssContactHandlerImplementation::DoPeriodicCallback()
- */
- static TInt PeriodicCallback( TAny* pX );
-
- /**
- * Timer callback used to check if periodic action completed,
- * there are events to process and contact handler can do it now
- * (is idle). If this is true, initiates event processing
- */
- void DoPeriodicCallback();
-
- /**
- * Checks if it events look like they are periodically sent
- * from some lengthy operation
- * @return ETrue if periodic behavior detected, EFalse otherwise
- */
- TBool PeriodicAction();
-
- /**
- * Updates variables used for periodic action checks.
- * Adds current time to the array of phonebook event moments
- */
- void UpdatePeriodicActionVars();
-
-
- /**
- * Returns maximal interval between time moments recorded in the array.
- * Moments are stored in a cyclic way, i.e. moment 0 is stored at index 0,
- * moment1 at index 2,... moment n at index 0 again
- * @param aMoments Array of time moments
- * @param aMomensLength Length of the aMoments array. Must be > 1
- * @param aLastMomentIndex Index of the last recorded moment within aMoments
- * @return Maximal interval. If Maximal interval is too big to fit into
- * TTimeIntervalMicroSeconds32, TTimeIntervalMicroSeconds32(KMaxTInt)
- * is returned
- */
- TTimeIntervalMicroSeconds32 MaximalInterval( const TTime aMoments[], const TInt aMomentsLength, const TInt aLastMomentIndex );
-
- /**
- * Set the contact handler state. It is the place, where state-related
- * invariants are checked in debug builds. In debug builds panics if
- * intended change is illegal
- */
- void SetState( TContactHandlerState aState );
-
- /**
- * Returns immediately if neither data sync nor backup is in progress
- * Otherwise waits indefinetely until data sync run is over
- */
- void WaitUntilNoSyncBackupIsRunning();
-
- /**
- * Sets the central repository full resync flag
- * @leave CRepository error codes
- */
- void SetFullResyncCrFlagL( TBool aResyncNeeded );
-
-#ifdef __SIND_EXTENSIONS
- /**
- * Read name dialling extension from resource file
- */
- void ReadExtensionsL();
-
- /**
- * Finds extension field based on priority lists
- *
- * @param aAction Extension action
- * @return KErrNotFound if contact item field was not found
- */
- TInt FindExtensionField( TVasExtensionAction aAction,
- TPbkFieldId aDefaultFieldId );
-
-
- /**
- * Loops through list of fields
- *
- * @param aArray Array field IDs
- * @param aCount Number of elements in aArray
- * @param aItem Contact item
- *
- * @return KErrNotFound if contact item field was not found
- */
- TInt ExtensionFieldFindLoop( const TPbkFieldId* const aArray,
- TInt aCount );
-#endif // __SIND_EXTENSIONS
-
- /**
- * Reads a contact and returns a phonebook contact item. If contact is
- * already locked by something, function keeps trying for a long time.
- * If still fails, contact handler is disabled and full resync will
- * be attempted after the reboot
- *
- * @param aContactId Contact item id to be read.
- */
- void ReadContactL( TContactItemId aContactId );
-
- /**
- * Opens a contact. If contact is already locked by something,
- * function keeps trying for a long time.
- * If still fails, contact handler is disabled and full resync will
- * be attempted after the reboot
- *
- * @param aContactId Contact item id to be opened.
- */
- void OpenContactL( TContactItemId aContactId );
-
- /**
- * Reads contact from phonebook
- *
- * If contact is already locked by something, function keeps trying for a long time.
- * If still fails, contact handler is disabled and full resync will
- * be attempted after the reboot
- *
- * @param aContactId Contact of interest
- * @param aReadContact ETrue for ReadContactL and EFalse for OpenContactL
- */
- void GetContactL( TContactItemId aContactId, TBool aReadContact );
-
- /**
- * Static callback required by Symbian Timer services.
- * Real action happens in the DoContactWaitCallback
- * @param pX Pointer to the active instance of CNssContactHandlerImplementation
- * @return KErrNone. Has no meaning in this case
- * @see CNssContactHandlerImplementation::DoPeriodicCallback()
- */
- static TInt ContactWaitCallback( TAny* pX );
-
- /**
- * Timer callback used to check if phonebook contact is unlocked
- * Unlocks the waiter
- */
- void DoContactWaitCallback();
-
- /**
- * Utility function to check if there isn't enough disk space to perform
- * the operation.
- *
- * @return ETrue if there is not enough disk space, EFalse otherwise
- */
- TBool NoDiskSpace();
-
- /**
- * Utility function to substitute all separator characters as white spaces.
- *
- * @param aBuf Descriptor which is manipulated
- */
- void TrimName( HBufC* aBuf );
-
- /**
- * Utility function to append name to a buffer.
- *
- * @param aBuf Descriptor which is appended
- * @param aName Name
- */
- void AppendName( HBufC* aBuf, HBufC* aName );
-
- /**
- * Utility function to append extension marker ("_2") to buffer.
- *
- * @param aDes Buffer where to do the modification
- */
- void AppendExtensionMarker( TDes& aDes );
-
- /**
- * Establishes the connection to the contact engine and
- * starts listening to it
- */
- void ConnectToPhonebookL();
-
- /**
- * Clears the connection to the contact engine
- */
- void DisconnectFromPhonebook();
-
- private: // Data
- // Phonebook engine
- MVasBasePbkHandler* iPbkHandler;
- CNssVASDBMgr* iVasDbManager;
- MNssTagMgr* iTagManager;
- MNssContextMgr* iContextManager;
- TContactHandlerState iState;
-
- // Id of the contact that is currently deleted
- /** @todo Why is it not used for additions? Or why it is used at all? */
- TContactItemId iContactId;
-
- // Notifier object for the default contact database.
- // iContactChangeNotifier attaches contact handler to the phonebook
- // engine as long as the object exists.
- // CPbkContactChangeNotifier* iContactChangeNotifier;
-
- // Tells if ocntact handler is active
- TBool iHandlerEnabled;
-
- // Context used for name dialing
- MNssContext* iContext;
-
- // List of raw database events. Also can store special 'full resync' event
- RArray<TPhonebookEvent> iEventArray;
-
- // Number of retrials to save tags
- TInt iRetry;
-
- // Delimeter between first an last name in the contact title
- TChar iSeparator;
-
- // Array of relevant data from contacts to add
- // Just id and title
- RArray<TContactData> iContactQueue;
-
- // Language specific settings
- CNssTrainingParameters* iTrainingParams;
-
- // List of contacts to add to VAS
- RArray<TPhonebookEvent> iAddList;
-
- // List of contacts to remove tags for
- RArray<TPhonebookEvent> iDelList;
-
- // List of contacts, for which voice tag icon has been added OR REMOVED
- // Is used to ignore events related to the change of voice dial icon
- RArray<TContactItemId> iVoiceTagAddedList;
-
- // List of contacts for which voice tag icon should be removed if present
- // The need for it occurs if training voice tag fails and before training
- // icon was present
- RArray<TContactItemId> iRemoveIconList;
-
- // List of tags that are to be trained and saved
- RPointerArray<MNssTag> iTagArray;
-
- // Counts the number of callbacks after TrainText() calls
- TInt iTrainCallbackCounter;
-
- // Counts the number of callbacks after SaveTag() calls
- TInt iSaveCallbackCounter;
-
- // Counts the number of callbacks after DeleteTag() calls
- TInt iDeleteCallbackCounter;
-
- // General information about the context used for name dialing:
- // language and last sync timestamp
- TNssContextClientData iClientData;
-
- // Tells if full resync happened at least once
- // I.e. if name dialing context exists
- TBool iHaveWeEverSynced;
-
- // Indicates if error happened during normal event handling
- // Can be only KErrNone of KErrGeneral
- TInt iNormalChangesError;
-
- // List of tags to be deleted for one contact
- // (main name + possible nickname )
- MNssTagListArray* iDeleteTagListArray;
-
- // Languages which use lastname-firstname order in names
- RArray<TLanguage> iSwappedLanguages;
-
- // Timer used to ensure, that events queue is checked at least every 30 secs
- CPeriodic* iPeriodicHandleEventTimer;
-
- // Array of event receivement times
- TTime iEventMoments[KEventMomentsSize];
-
- // Index of the last value in iRestartTimerCalls
- TInt iEventMomentIndex;
-
-
- // Time interval used to detect END of periodic action. In microseconds
- // Note, that it is NOT the value used to command
- // iPeriodicHandleEventTimer
- TTimeIntervalMicroSeconds iEndOfPeriodicActionInterval;
-
- // Counter for consecutive full resyncs forced by error during
- // handling normal changes (or also resync changes)
- // Is used to prevent endless resyncing in case of some unexpected
- // consistent lower level failure
- TInt iConsecutiveErrorFullResync;
-
- // Publish & Subscribe property, that tells external entities if contact
- // handler training is ongoing. Note, that it is different from
- // the contact handler state
- RProperty iBusyProperty;
-
- // Publish & Subscribe property that watches for the PC-Suite Sync activity
- RProperty iSyncProperty;
-
- // Temporary container for a tag that is created and used in the
- // DoAddNamesL. Member variable is used only because we cannot use
- // CleanupStack with MNssTag
- MNssTag* iNewTag;
- // Informs that VoIP feature is supported.
- TBool iVoIPFeatureSupported;
-
- // Informs that video telephony feature is supported
- TBool iVideoCallFeatureSupported;
-
-#ifdef __SIND_EXTENSIONS
- // extensions
- RArray<TExtension> iExtensionList;
-#endif //__SIND_EXTENSIONS
-
- // ETrue if PC-suite data sync is in progress. I.e. contact hanlder should
- // delay its actions until iDataSyncRunning is EFalse
- TBool iDataSyncRunning;
-
- // Waits until iDataSyncRunning is EFalse
- CActiveSchedulerWait* iSyncBackupWaiter;
-
- // Waits until contact of interest is unlocked
- CActiveSchedulerWait* iContactWaiter;
-
- // Periodic timer that ticks ones per socond if we are waiting for the
- // contact unlock
- CPeriodic* iContactWaitTimer;
-
- // Watches for the data sync state changes
- MNssDataSyncWatcher* iDataSyncWatcher;
-
- // Watches the backup/restore state
- CNssChBackupObserver* iBackupObserver;
-
- // Watches central repository changes
- CCenRepNotifyHandler* iRepositoryObserver;
-
- // Is used to *asynchronously* simulate successful tag deletion
- CSuccessfulDeletionSimulator* iDeletionSimulator;
-
- // To simplify access for the pure utility class
- friend class CSuccessfulDeletionSimulator;
-
- // File server session to find out the available disk space
- RFs iFSession;
-
- // central repository for setting resync needed flag
- CRepository* iRepository;
-
- // flag for phonebook restore
- TBool iRestoreRunning;
-
- // Current resync flag state
- TBool iResyncAtBoot;
- };
-
-#endif // CONTACTHANDLERIMPL_H
-
-// End of File