--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btui/devmodel/inc/btregistryobserver.h Mon Jan 18 20:28:57 2010 +0200
@@ -0,0 +1,139 @@
+/*
+* Copyright (c) 2006-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: Registry observer is listening to registry changes and
+* and reporting the changed devices to the listener.
+*
+*/
+
+#ifndef BTREGISTRYOBSERVER_H
+#define BTREGISTRYOBSERVER_H
+
+#include <e32base.h>
+#include <e32property.h>
+#include <btmanclient.h>
+#include <btengdevman.h>
+
+/** This class will inform the listener about the new BTregistry status
+*after registry change events.
+*
+* This class will listen to events about registry changes and inform
+* the listener about the latest registry status. The listener can
+* also ask the status using refresh. This is usefull for for
+* for example retrieval of initial lists of devices.
+*
+*@lib btdevmodel.dll
+*@since S60 V3.2
+*/
+NONSHARABLE_CLASS(MBTRegistryObserver)
+ {
+public:
+ /** The aDeviceArray constents are deleted after this
+ * call returns. If storage is wanted the array and its contents
+ * must be copied by implementor.
+ */
+ virtual void RegistryChangedL(const CBTDeviceArray* aDeviceArray) = 0;
+ };
+
+NONSHARABLE_CLASS(CBTRegistryObserver) : public CActive, public MBTEngDevManObserver
+ {
+public:
+ /** NewL
+ *@param aObserver The class that is listening to registry changes
+ *@param aPattern The pattern to be used to retrieve the changed objects.
+ */
+ static CBTRegistryObserver* NewL(MBTRegistryObserver* aObserver,
+ const TBTRegistrySearch aPattern);
+
+ /** Destructor*/
+ virtual ~CBTRegistryObserver();
+
+ /** Start listening to registry changes.
+ *
+ *Calling this while registry observer is running is silently ignored.
+ */
+ void StartIfNotRunning();
+
+ /* Registry observer will retrieve list of devices in the backround
+ * and send it to the listener, when one is retrieved.
+ */
+ void Refresh();
+
+ /** Check if this is running.
+ *@return ETrue if not listening to registry changes.
+ */
+ inline TBool IsStopped() {return iIsStopped;}
+
+ /** This will stop listening and cancel any retrieval of devicelists,
+ * if any.
+ * @param none.
+ * @return none.
+ */
+ void Cancel();
+private:
+ /* Constructor that may not leave.
+ *@param aObserver The class that is listening to registry changes
+ *@param aPattern The pattern to be used to retrieve the changed objects.
+ */
+ CBTRegistryObserver(MBTRegistryObserver* aObserver, const TBTRegistrySearch aPattern);
+ /** 2nd phase constructor. Called by NewL only.
+ * @param none.
+ * @return none.
+ */
+ void ConstructL();
+
+ /** This is called when registry changes occur, but not when deviceLists are
+ * retrieved, since HandleGetDevicesComplete is called then.
+ *
+ * If one or more registry events occur during devicelist retrieval, there
+ * will be one new devicelist retrieval after the current retrieval is done.
+ *
+ * @param none.
+ * @return none.
+ */
+ void RunL();
+
+ /** This will clear iRegDeviceArray and delete its contents.
+ * @param none.
+ * @return none.
+ */
+ void DeleteAllocatedDevices();
+
+
+ /** This will cancel listening. To be called by Cancel only.
+ * @param none.
+ * @return none.
+ */
+ void DoCancel();
+
+ /** This is called when devicelist have been read from BtDevMan
+ * @param aErr KErrNone or the accurred error.
+ * @param aDeviceArray the devices that have been retrieved.
+ * @return none.
+ */
+ void HandleGetDevicesComplete(TInt aErr, CBTDeviceArray* aDeviceArray);
+
+private:
+ MBTRegistryObserver* iObserver; // the class listening to this class
+ CBTDeviceArray* iRegDeviceArray; // this is used for retrieving devices
+ TBTRegistrySearch iSearchPattern; // the search used to retrieve devices
+ // NOTE: this class does not filter the results,
+ // but the one listening to this (if filtering is done).
+ RProperty iProperty;
+ CBTEngDevMan* iDevMan; // the object that is used to retrieve the device lists.
+ TBool iIsStopped; // is this runining.
+ TBool iAnotherEventPending; // Has there been one or more changes during this retrieval.
+ // if this is true then HandleGetDevices will start a new search.
+ };
+
+#endif