--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btui/devmodel/inc/btdevmodelbase.h Mon Jan 18 20:28:57 2010 +0200
@@ -0,0 +1,286 @@
+/*
+* 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: Abstract base class for concete models.
+*
+*/
+
+
+#ifndef BTDEVMODELBASE_H
+#define BTDEVMODELBASE_H
+
+#include <btengdevman.h> // for MBTEngDevManObserver
+
+#include "btdevmodel.h"
+#include "btregistryobserver.h" // for MBTRegistryObserver
+
+/**
+* This is a abstract class providing basic common fucntions for derived classes.
+* It act as a mediator between UI applications and Bluetooth Engine Device Management API.
+*
+*@lib btdevmodel.dll
+*@since S60 V3.2
+*/
+NONSHARABLE_CLASS( CBTDevModelBase ): public CBase, public MBTEngDevManObserver, public MBTRegistryObserver
+ {
+public: // Constructors and destructor
+ /** destructor
+ *@param none.
+ *@return none.
+ */
+ virtual ~CBTDevModelBase();
+public:
+
+ /** Checks if any of the devices shown in view have active bluetooth connection.
+ * This baseclass does not support connections, so the answer is allways EFalse.
+ *
+ * NOTE: TBTUIViewsCommonUtils::IsAnyDeviceConnectedL will report also those devices
+ * that are not part of particular view, such as paired devices.
+ * CBTPairedModel::IsAnyDeviceConnected reports only connection from paired devices.
+ *
+ *@return ETrue, if one or more devices are connected. EFalse if no devices are connected.
+ */
+ TBool virtual IsAnyDeviceConnected();
+ /**
+ * Get device based on addr or index.
+ * @param aDevice the TBTDevice holder. You have to set either the deviceAddress or the
+ * or the device index. If you specify both the device address and the index then the address is used,
+ * this includes those cases when there is no device corresponding the address.
+ * @return KErrNone if ok.
+ * KErrArgument, if neither index not address is filled.
+ * KErrOverFlow if index is out of range. which means it is negative or the internal array does not have that
+ * many items.
+ * KErrNotFound if the given address does not exists, in the internal array.
+ */
+ TInt virtual GetDevice(TBTDevice& aDevice);
+
+ /**
+ * Change status of all devices on the list. This is used by Delete All operations in paired devices view
+ * (EOpPair) and Blocked devices view(EOpUnblock)
+ *
+ * This creates multiple operations in the intergal queue that are all executed on by one.
+ *
+ * @param aOperation unpair/unblock
+ * @return None.
+ */
+ void ChangeAllDevices(const TBTDeviceOp aOperation);
+
+ /**
+ * Change device status, add device, e.g. block, unpair,unblock etc.
+ *
+ * The operation is put to queue and executed when the prior operations
+ * of the queue are finnished. Immeadiately if the queue is empty.
+ *
+ * @param aDevice. The device and the type of the change. If the address is empty, then the
+ * device index means what device is to be used.
+ * @return none
+ */
+ virtual void ChangeDeviceL(const TBTDevice& aDevice);
+
+ /**
+ * Change device status, add device, e.g. block, unpair,unblock etc.
+ * This will check for leaves and make a callback, if leave occurs.
+ *
+ * The operation is put to queue and executed when the prior operations
+ * of the queue are finnished. Immeadiately if the queue is empty.
+ *
+ * @param aDevice. The device and the type of the change. If the address is empty, then the
+ * device index means what device is to be used.
+ * @return none
+ */
+
+ virtual void ChangeDevice(const TBTDevice& aDevice);
+
+ /**
+ * Cancel connecting, pairing, modifying device in BTRegistry
+ *
+ * Cancels ongoing operation or operation from queue, if it has not been started yet.
+ * Cancels it, if it is being executed. Used by Canceling Connecting and pairing operations.
+ *
+ * @param aDevice. The device and the type of the change that will be canceled.
+ * If the address is empty, then the
+ * device index means what device is to be used.
+ * @return None.
+ */
+ virtual void CancelChange(const TBTDevice& aDevice);
+
+ /** Creates and allocates TBTDevice representation of this device
+ *@param aRegDevice the device to be converted,
+ *@param aNameEntry contains the EIR data of the device if its data is valid
+ *@return the TBTDevice representation of the same device. (Note the caller is responsible for deleting
+ * the returned item.)
+ */
+ virtual TBTDevice* CreateDeviceL(const CBTDevice* aRegDevice,
+ TNameEntry* aNameEntry);
+
+ /** Checks if there are any ChangeDeviceCommands that are not finnished.
+ *@return ETrue if the are one or more commands being executed or are in the execution queue.
+ */
+ virtual TBool DeviceChangeInProgress();
+
+ /** This is used to make callback to iObserver, when a leave has been detected.
+ *It will also clean up the partial operation.
+ *
+ *@param aErr the leave error code
+ *@param aDevice The device and operation that cause the leave.
+ * If this is inserted in the queue, it is deleted from there.
+ * If the leave occurred before inserting it to execution queue
+ * (not common), then it will not deleted from there.
+ *@return none.
+ */
+ virtual void HandleLeave(TInt aErr,const TBTDevice* aDevice );
+
+protected:
+ /**
+ * Change device status, add device, e.g. block, unpair,unblock etc.
+ *
+ * This is the operation that is used to to execute the operation queued by ChangeDevice.
+ *
+ * @param aDevice. The device and the type of the change. If the address is empty, then the
+ * device index means what device is to be used.
+ * @return KerrNone or system wide error code.
+ */
+ virtual TInt DoChangeDeviceL(const TBTDevice& aDevice);
+
+ /**
+ * Cancel ongoing connecting, pairing, modifying device in BTRegistry
+ *
+ * This is the operation that is used to cancel ongoing operation.
+ *
+ * @param aDevice. The device and the type of the change that will be canceled.
+ * If the address is empty, then the
+ * device index means what device is to be used.
+ * @return None.
+ */
+ virtual void DoCancelChangeL(const TBTDevice& aDevice);
+
+ /** This function recounts the indexes of iDeviceArray.
+ *@return none.
+ */
+ void RenumberDeviceArray();
+
+ /** Constructor
+ * @param aObserver The observer will receive information about command completes and
+ * changes in the devices.
+ * @param aOrder The order the devices are sorted. Default order is added by CBTDevMan, so
+ * this class can assume this parameter to be used. This class is responsible for deleting this parameter on
+ * its destructor.
+ */
+ CBTDevModelBase(MBTDeviceObserver* aObserver,
+ TBTDeviceSortOrder* aOrder );
+
+ /** Get the index for a device specified by bluetooth device address.
+ *
+ *@param aAddr the address of the searched device or KNullAddres.
+ *@param aIndexIfNullAddress, if this parameter is defined this function
+ *returns this index instead of KErrNotFound, it the device has nullAddress.
+ *@return index of the address. If the given address is KNullAddress then returns aIndexIfNullAddress or KErrNotFound if one is not specified by called.
+ *This will allways return KErrNone if the given address is not a KNullAddress and is not found.
+ */
+ TInt GetIndexByAddress(const TBTDevAddr aAddr,TInt aIndexIfNullAddress=KErrNotFound);
+
+ /** Adds the TBTDevice representation of this device to iDeviceArray, if
+ * this device is of that type (paired/blocked) that this model supports.
+ * If the device is not that type, it will not be added.
+ *
+ * NOTE: This function is not guaranteed againt duplicates, so multiple
+ * additions of the same device will lead to multiple copies of it.
+ *
+ * Subclasses can also implement their version of this function to add information
+ * to the device objects, such as connection information.
+ *
+ * @param aRegDevice the device to be added (if not filtered).
+ * @param aNameEntry contains the EIR data of the device if its data is valid
+ * @aOperation the operation that this device will contain when added.
+ */
+ void AddDeviceL(const CBTDevice* aRegDevice,
+ TNameEntry* aNameEntry,
+ const TBTDeviceOp aOperation=EOpNone);
+
+ /** Replaces iDeviceArray contents with the given devices
+ *@param aDeviceArray the devices that will be added to internal structures.
+ */
+ virtual void CreateDevicesL(const CBTDeviceArray* aDeviceArray);
+
+ /** Adds the given device to internal structures of this class
+ * using AddDeviceL, if the device is such that it should not be listed by this
+ * class, then it is not added.
+ *
+ * Implementing is used to filter out devices that are not handled by particular view.
+ *
+ * @param aNameEntry contains the EIR data of the device if its data is valid
+ */
+ virtual void HandleNewDeviceL(const CBTDevice* aRegDevice,
+ TNameEntry* aNameEntry) = 0;
+
+ /** Sends refresh of list of shown devices to listener.
+ *
+ * @param aErr If this is not KErrNone, then this function
+ * will send refresh to the listener. Allways send, if not specified.
+ * If this funtion is not KEerrNone, then the funtion does nothing.
+ * @param aSelectedItem. If this is specified, then select this item.
+ * if not specified uses the same item that the listener used to have active.
+ */
+ virtual void SendRefreshIfNoError(TInt aErr=KErrNone,TInt aSelectedItem = KErrNotSupported );
+
+protected:
+
+ /** This callback is used to to notify this call from completed changed from iDevMan.
+ * Inherited from MBTEngDevManObserver.
+ *
+ * This funtion will trap any leave if they may occur and report them as errors in the
+ * corresponfing device change operarion.
+ */
+ void HandleDevManComplete(TInt aErr);
+
+ /** Inherited from BTEng's MBTEngDevManObserver, and implemented as empty,
+ * because we do ask devicelists directly from iDevman, but trough iRegistryObserver->Refresh()
+ */
+ void HandleGetDevicesComplete(TInt aErr, CBTDeviceArray* aDeviceArray);
+
+ /** This callback is used by iRegistryObserver to notify device changes, that
+ * originate both from changes of the BTRegistry as well as refreshes requested
+ * by this class.
+ * @aDeviceArray the devices that the registry observer gets.
+ */
+ void RegistryChangedL(const CBTDeviceArray* aDeviceArray);
+
+ /** Check if there is allready one or more devices with this name.
+ *@return ETrue if there is.
+ */
+ TBool IsNameExisting(const TDesC& aName);
+
+ /** Executes the next one in the queue, if any.
+ * Leaves are trapped by this class and send as failed commands to iObserver
+ * using HandleLeave.
+ *@param none.
+ *@return none.
+ */
+ void HandleQueue();
+
+protected: // Data
+ MBTDeviceObserver* iObserver; // the listener of the completed commands and registry changes.
+ CBTEngDevMan* iDevMan; // This is used to change the devices.
+ TBTDeviceSortOrder* iSortOrder; // The order the devices are sorted to.
+ RDeviceArray iDeviceArray; // The list of current devices.
+ CBTRegistryObserver* iRegistryObserver; // This takes care of sending the devicelist to us each time
+ // something may have been changes.
+ TBTRegistrySearch iSearchPattern; // the pattern iRegistrySearch uses in retrieving devicelist.
+ // NOTE: HandleDeviceL is used to filter the results.
+ TBool iIsChangeAll;
+ TBTDevice* iDevice; // the currently changed device, if any
+ RDeviceArray iQueue; // The queue of commands to be executed
+ };
+
+#endif // BT_DEV_MODEL_BASE_H
+