/* * Copyright (c) 2005-2009 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: * */ /** @file @internalComponent @released */ #ifndef __CNTPHBKSYNCWATCHER_H__ #define __CNTPHBKSYNCWATCHER_H__ #include class CSinglePhbkWatcher; /** Types of ICC Phonebook synchronisation tht Contact Views care about events. */ enum TPhonebookState { /** Initial state, or ICC card has 'gone away' (e.g. ICC is resetting). */ EIccPhbkNotSynchronised, /** ICC Phonebook has completed synchronisation. */ EIccPhbkSynchronised, /** Sync failed due to ICC either being locked or not ready. */ EIccWaitForPhbkToBeReady, /** ICC Sync with Phonebook Server failed. */ EIccPhbkSyncError, }; /** An observer class for Contacts Views to track the status of ICC Phonebook Synchronisation. */ class MContactPhbkSyncObserver { public: virtual void ContactPhbkSyncEventHandler(TPhonebookState aPhbkState) = 0; }; /** A watcher class for Contacts Views to track the status of ICC Phonebook Synchronisation. If created with a NULL pointer to the Phonebook Sync plugin implements default behaviour of notifications (e.g. no Phonebook Synchroniser plugin present or non-default database). */ NONSHARABLE_CLASS(CContactPhbkSyncWatcher) : public CBase { public: static CContactPhbkSyncWatcher* NewL(MContactSynchroniser& aSyncPlugin); ~CContactPhbkSyncWatcher(); /** Add the object that sorts a contact view to the PhbkSync observer list. */ void AddPhbkObserverL(MContactPhbkSyncObserver& aPhbkObserver); /** Add the object that sorts a contact view to the PhbkSync observer list. */ void RemovePhbkObserver(MContactPhbkSyncObserver& aPhbkObserver); TInt PhonebooksReady(); TInt PhonebooksWaiting(); TInt PhonebookSyncError(); TInt ObserverCount(); private: CContactPhbkSyncWatcher(MContactSynchroniser& aSyncPlugin); void ConstructL(); friend class CSinglePhbkWatcher; MContactSynchroniser& SyncPlugin(); void SendWatcherEvent(TPhonebookState aNewState, TPhonebookState aOldState, TInt aError=KErrNone); private: MContactSynchroniser& iSyncPlugin; RArray iObservers; RPointerArray iWatchers; TInt iPhonebooksReady; TInt iPhonebooksWaiting; TInt iPhonebookErrors; TInt iSyncError; }; NONSHARABLE_CLASS(CSinglePhbkWatcher) : public CActive { public: static CSinglePhbkWatcher* NewLC(CContactPhbkSyncWatcher& aSyncWatcher, TUid& aPhonebookUid); ~CSinglePhbkWatcher(); TBool IsAcceptableError(TInt aSyncError); private: CSinglePhbkWatcher(CContactPhbkSyncWatcher& aSyncWatcher, TUid& aPhonebookUid); void ConstructL(); void Start(); // From CActive. void DoCancel(); void RunL(); TInt RunError(TInt aError); private: CContactPhbkSyncWatcher& iSyncWatcher; TUid iPhonebookUid; TPhonebookState iPhbkState; }; #endif // __CNTPHBKSYNCWATCHER_H__