--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/bluetoothengine/btui/Ecom/inc/BTUIPairedDevicesView.h Mon Jan 18 20:28:57 2010 +0200
@@ -0,0 +1,490 @@
+/*
+* 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: The view that handles paired devices.
+*
+*/
+
+#ifndef BTUIPAIREDDEVICESVIEW_H
+#define BTUIPAIREDDEVICESVIEW_H
+
+#include <aknview.h>
+#include <eikmenup.h> // Menu pane definitions
+#include <AknWaitDialog.h>
+#include <AknQueryDialog.h>
+#include <btengconstants.h>
+#include <btengdiscovery.h>
+#include "BtuiPluginInterface.h"
+#include "btdevmodel.h"
+#include "BTUIListedDevicesView.h"
+#include "btuipluginman.h"
+#include "BTUIActive.h"
+#include <SecondaryDisplay/BtuiSecondaryDisplayAPI.h>
+#include <gstabbedview.h>
+
+class CAknNavigationControlContainer;
+class CBTUiDeviceContainer;
+class CGSTabHelper;
+class CBTEngSettings;
+class CBTUIMainView;
+
+// if there are more connection that this, it is disallowed to
+// connect to any device
+const TInt KBtUiMaxConnections = 6;
+
+/**
+* Paired devicew view of the pluetooth application.
+*
+* This view handles lists of paired device and pairing new devices, unpairing devices
+* and setting previously paired devices as blocked. Also connecting and disconnecting
+* are done by using this view.
+*
+*@lib BTUIPlugin.dll
+*@since S60 v3.0
+*/
+class CBTUIPairedDevicesView : public CBTUIListedDevicesView,
+ public MBTEngSettingsObserver,
+ public MProgressDialogCallback,
+ public MBTEngSdpResultReceiver, // for bt discovery. SDP is not used
+ public MGSTabbedView,
+ public MBTUIActiveObserver
+{
+ public:
+
+ /**
+ * ECOM implementation instantiation function of
+ * interface "CBtuiPluginInterface", to be used by BTUI Application.
+ */
+ static CBTUIPairedDevicesView* NewL(MBtuiPluginViewActivationObserver* aObserver = NULL);
+
+ static CBTUIPairedDevicesView* NewLC(CBTUIMainView* aBaseView, CArrayPtrFlat<MGSTabbedView>* aTabViewArray);
+
+ /**
+ * Symbian 2nd phase constructor.
+ */
+ void ConstructL();
+
+ void ConstructL( CBTUIMainView* aBaseView, CArrayPtrFlat<MGSTabbedView>* aTabViewArray );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CBTUIPairedDevicesView();
+
+ /**
+ * From MGSTabbedView:
+ * Creates new icon for tab. Ownership is transferred to client.
+ * @since 3.1
+ */
+ CGulIcon* CreateTabIconL();
+
+ public: // Functions from base classes
+
+ /**
+ * From CAknView Returns view id.
+ * @param None.
+ * @return View id.
+ */
+ TUid Id() const;
+
+ /**
+ * From CAknView Handles user commands.
+ * @param aCommand A command id.
+ * @return None.
+ */
+ void HandleCommandL(TInt aCommand);
+
+ protected:
+ /**
+ * C++ default constructor.
+ */
+ CBTUIPairedDevicesView (MBtuiPluginViewActivationObserver* aObserver= NULL);
+
+ private: // Functions from base classes
+
+ /**
+ * From CAknView Activates view.
+ * @param aPrevViewId Id of previous view.
+ * @param aCustomMessageId Custom message id.
+ * @param aCustomMessage Custom message.
+ * @return None.
+ */
+ void DoActivateL( const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage );
+
+ /**
+ * From CAknView Deactivates view.
+ * @param None.
+ * @return None.
+ */
+ void DoDeactivate();
+
+ /**
+ * From CAknView Dynamically initialises options menu.
+ * @param aResourceId Id identifying the menu pane to initialise.
+ * @param aMenuPane The in-memory representation of the menu pane.
+ * @return None.
+ */
+ void DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane);
+
+ // implemented from MProgressDialogCallback
+ /** This is used to cancel connecting and pairing, if user presses the Cancel-button.
+ * From MProgressDialogCallback Get's called when a dialog is dismissed.
+ * @param aButtonId Id of the pressed button.
+ * @return None.
+ */
+ void DialogDismissedL( TInt aButtonId );
+
+ public: // from MBTDeviceObserver
+ /**
+ * Informs the observer that an error happened in changing device status or a new device added.
+ * @param aErr Symbian error code
+ * @param aDevice the device which is changed.
+ * @param aDevNameArray hold conflicting devices' short names if "AlreadyExist" error happened during "connect"
+ * @return None.
+ */
+ void NotifyChangeDeviceComplete(const TInt aErr, const TBTDevice& aDevice,
+ const RBTDevNameArray* /*aDevNameArray*/ ) ;
+ /**
+ * Leaving version of NotifyChangeDeviceComplete
+ * @param aErr Symbian error code
+ * @param aDevice the device which is changed.
+ * @param aDevNameArray hold conflicting devices' short names if "AlreadyExist" error happened during "connect"
+ * @return None.
+ */
+ void NotifyChangeDeviceCompleteL(const TInt aErr, const TBTDevice& aDevice,
+ const RBTDevNameArray* /*aDevNameArray*/ ) ;
+
+ /** Updates the shown device list. This module will send this list forward
+ * to container that takes care of the actual display of those devices
+ *
+ *@param aDevices all the devices to be shown
+ *@param aSelectedItemIndex currently selected item after refresh.
+ */
+ void RefreshDeviceList(const RDeviceArray* aDevices,TInt aSelectedItemIndex);
+
+ private: // From MBTUIActiveObserver
+
+ /**
+ * Callback to notify that an outstanding request has completed.
+ * @param aActive Pointer to the active object that completed.
+ * @param aId The ID that identifies the outstanding request.
+ * @param aStatus The status of the completed request.
+ */
+ void RequestCompletedL( CBTUIActive* aActive, TInt aId,
+ TInt aStatus );
+
+ /**
+ * Callback to notify that an error has occurred in RunL.
+ *
+ * @param aActive Pointer to the active object that completed.
+ * @param aId The ID that identifies the outstanding request.
+ * @param aStatus The status of the completed request.
+ */
+ void HandleError( CBTUIActive* aActive, TInt aId,
+ TInt aError );
+
+ public: // Operations to devices not containing confirmation queries
+ /**
+ * Sets the current security setting of the device.
+ * Does not ask user about it.
+ *
+ * @param aTrusted ETrue when trusted, EFalse if untrusted.
+ * @return None.
+ */
+ void ChangeDeviceSecurityL( TBool aTrusted );
+
+ /**
+ * Issues prompts to connects to specified accessory.
+ * Connects to it if user andswers yes.
+ *
+ * @param TBTDevice connect to this device
+ * @return None.
+ */
+ void ConnectL( const TBTDevice& aDevice, TBool aNewWaitNote );
+
+ /**
+ * Disconnects from the selected BT Accessory.
+ *
+ * @param None.
+ * @return None.
+ */
+ void DisconnectL();
+
+ /**
+ * Removes iDisconnectQueryDlg created in DisconnectL
+ *
+ * @param None.
+ * @return None.
+ */
+ void CancelDisconnectQueryDlgL();
+
+ /**
+ * Disconnects from the selected BT Accessory without query.
+ *
+ * @param None.
+ * @return None.
+ */
+ void DisconnectWithoutQuery();
+
+ /** Checks if there is an active phonecall.
+ *@return ETrue if there is, EFalse otherwise
+ */
+ TBool CallOnGoing();
+
+
+ /** This is used to create TCallBack to help. This is static, since TCallBack does not
+ * allow instance methods. This is used by BlockDeviceDlgL to add help callback to the query.
+ *
+ * @param aTCoeHelpContext. Must be instance TCoeHelpContext, or NULL.
+ * If this is not specified this will open help about blocked devices.
+ * This is not an instance of TCoeHelpContext, since TCallback does not allow
+ * parameters of other type that TAny*.
+ * @return allways KErrNone. TCallBack does not allow void functions
+ */
+ static TInt LaunchHelp(TAny *aTCoeHelpContext=NULL);
+
+ private: //These handle command given by user
+ /**
+ * Asks new nick name for the BT Device from user and
+ * attempt to rename the device. Failures are handled by NotifyChangeDeviceComplete.
+ *
+ * @param None.
+ * @return None.
+ */
+ void RenameDeviceDlgL();
+
+ /**
+ * Asks confirmation for deleting a BT Device from user.
+ * Delete the current device if yes replied yes.
+ *
+ * @param None.
+ * @return None.
+ */
+ void DeleteDeviceDlgL();
+
+ /**
+ * Asks confirmation for deleting all BT devices from user.
+ * Delete the devices if yes replied yes.
+ *
+ * @param None.
+ * @return None.
+ */
+ void DeleteAllDevicesDlgL();
+
+ /**
+ * Initiates the pairing procedure to get a new paired device.
+ * DeviceSearchComplete is called after the dialog is done.
+ *
+ * @param None.
+ * @return None.
+ */
+ void NewPairedDeviceDlgL();
+
+ /**
+ * Asks confirmation for Blocking the selected BT Device.
+ * Blocks the current device if yes replied yes.
+ *
+ * @param None.
+ * @return None.
+ */
+ void BlockDeviceDlgL();
+
+ /**Opens a wait note.
+ *
+ *@param dialog. The dialog object to be used for displaying this note.
+ *@param aNoteResource The resource of the note, not including the text.
+ *@param aNoteTextResource The text resource. The %U if this note is filled up with aDevName.
+ *@param aSec SecondaryDisplaycommand
+ *@param aDevName The dev name filled in aNoteTextResource
+ */
+ void OpenWaitNoteL(CAknWaitDialog *&dialog,TUint aNoteResource,TUint aNoteTextResource,
+ TSecondaryDisplayBtuiDialogs aSec,const TDesC& aDevName);
+
+ /** Open Setting view for peripheral devices
+ *
+ * @param None.
+ * @return None.
+ */
+ void LaunchSettingViewL();
+
+ public: // Inherited from MBTEngSdpResultReceiver
+
+
+ /** Inherited from MBTEngSdpResultReceiver and implemented as empty,
+ * since this class will not do service searches, only device searches.
+ */
+ void ServiceSearchComplete( const RSdpRecHandleArray& aResult,
+ TUint aTotalRecordsCount, TInt aErr ) ;
+ /** Inherited from MBTEngSdpResultReceiver and implemented as empty,
+ * since this class will not do attributes seaches, only device searches.
+ */
+ void AttributeSearchComplete( TSdpServRecordHandle aHandle,
+ const RSdpResultArray& aAttr,TInt aErr ) ;
+ /** Inherited from MBTEngSdpResultReceiver and implemented as empty,
+ * since this class will not do service attribute seaches, only device searches.
+ */
+ void ServiceAttributeSearchComplete( TSdpServRecordHandle aHandle,
+ const RSdpResultArray& aAttr,TInt aErr );
+
+ /**
+ * Provides notification of the result of the discovery of nearby
+ * Bluetooth devices. If a device is selected this class will try to pair it.
+ *
+ * @param aDevice The data structure encapsulates all information
+ * about the selected device. Ownership of the data
+ * structure has not been transfered and is still with
+ * the API client.
+ * This is not TBTDevice that is normally used inside the UI.
+ * @param aErr Error code of the device search operation; KErrNone if
+ * sucessful, KErrCancel if the user cancelled the
+ * dialog, KErrAbort if CBTEngDiscovery::CancelSearchRemoteDevice
+ * was called; otherwise one of the system-wide error codes.
+ */
+ void DeviceSearchComplete( CBTDevice* aDevice, TInt aErr );
+
+ /**
+ * Provides notification of the result of the discovery of nearby
+ * Bluetooth devices and EIR data. If a device is selected this class will try to pair it.
+ *
+ * @since S60 v5.1
+ * @param aDevice The data structure encapsulates information
+ * about the selected device.
+ * Ownership of the data structure has not been transfered and
+ * is still with the API client.
+ * @param aEirWrapper Contains the EIR data of the remote device.
+ * Ownership of the data structure has not been transfered and
+ * is still with the API client.
+ * @param aErr Error code of the device search operation; KErrNone if
+ * sucessful, KErrCancel if the user cancelled the
+ * dialog, KErrAbort if CBTEngDiscovery::CancelSearchRemoteDevice
+ * was called; otherwise one of the system-wide error codes.
+ */
+ void DeviceSearchComplete( CBTDevice* aDevice,
+ TNameEntry* aNameEntry,
+ TInt aErr );
+
+private:
+ /** Leaving version of DeviceSearchComplete.
+ *
+ * @param aDevice The data structure encapsulates all information
+ * about the selected device. Ownership of the data
+ * structure has not been transfered and is still with
+ * the API client.
+ * This is not TBTDevice that is normally used inside the UI.
+ * @param aEirWrapper Contains the EIR data of the remote device.
+ * Ownership of the data structure has not been transfered and
+ * is still with the API client.
+ * @param aErr Error code of the device search operation; KErrNone if
+ * sucessful, KErrCancel if the user cancelled the
+ * dialog, KErrAbort if CBTEngDiscovery::CancelSearchRemoteDevice
+ * was called; otherwise one of the system-wide error codes.
+ */
+
+ void DeviceSearchCompleteL( CBTDevice* aDevice,
+ TNameEntry* aNameEntry, TInt aErr );
+
+ /** Shows 'Disonnect first' note
+ *
+ * @param aDevice
+ */
+ void ShowDisconnecNoteL(TBTDevice *aDevice);
+
+ /**
+ * Auto connect to headset after pairing succeeded.
+ * @param aCount the counter of connecting request issuing staring from 0.
+ */
+ void ConnectIfNeededAfterPairL( TInt aCount );
+
+ public: // internal methods for informing operation completes
+ /**
+ * Informs that pairing attempt of a device has been completed.
+ * Dismisses wait note and displays questions about authorizing and
+ * connecting, if the device is connectable.
+ *
+ * This method is called by ModifyDeviceChangeL. This method will not inform
+ * iContainer about the pairing since that is done by ModifyDeviceChangeL.
+ *
+ * @param aError Status code of the operation.
+ * @param aDeviceIndex the new place of the device in UI
+ * @return None.
+ */
+ void BondingCompleteL( TInt aError,const TBTDevice& aDevice);
+
+ /** Informs that attempt to connect to a device is completed. Closes wait
+ * note and if there was an error shows the error notice.
+ *
+ * This method is called by ModifyDeviceChangeL. This method will not inform
+ * iContainer about the pairing since that is done by ModifyDeviceChangeL.
+ *
+ * @param aError KErrNone or system wide error code
+ * @param aDeviceIndex The index of the new device
+ * @param aConflictingDeviceName this is filled only when
+ */
+ void ConnectCompleteL(TInt aError,const TBTDevice& aDevice,
+ const RBTDevNameArray* aConflictingDeviceNames=NULL);
+
+
+ /**
+ * From MBTEngSettingsObserver - Called when powerstate is changed
+ * @param TBTPowerStateValue power state
+ * @return None
+ */
+ void PowerStateChanged( TBTPowerStateValue aState );
+
+ /**
+ * From MBTEngSettingsObserver - Called when visibility is changed
+ * @param TBTPowerStateValue state of visibility mode
+ * @return None
+ */
+ void VisibilityModeChanged( TBTVisibilityMode aState );
+
+
+ private: // Data
+
+ CAknWaitDialog* iWaitForPairingDlg; // Wait note for pairing
+ CAknWaitDialog* iWaitForConnectDlg; // Wait note for connecting to BT Accessory
+ CAknQueryDialog* iDisconnectQueryDlg; // Question dialog for disconnecting BT Accessory
+ TBool iHelpEnabled; // Flag for the Help feature
+
+ // these are needed so these are owened by someone
+ // and can be cleaned up, in case the operations are interrupted by the user.
+ CBTDevice* iPairingDevice;
+ TNameEntry iPairingDevNameEntry;
+ TBTDevice* iConnectDevice; //device we are trying to connect to
+ TBTDevice iDisconnectQueryDevice; //device we are trying to disconnect
+
+ CBTEngDiscovery* iDeviceSearcher; // used only for searching devices, not for device discovery
+ CBTEngSettings* iBtEngSettings; // used only for turning on bluetooth,
+ CBTUIPluginMan* iBTPluginMan;
+ CGSTabHelper* iTabHelper;
+ CBTUIMainView* iBaseView;
+ TBool iConstructAsGsPlugin; // Flag that indicate this obj is served as GS plugin not BTUI app's plugin.
+ TInt iExpectedCallBack; // In case of DeleteAll, counter for expected callback NotifyChangeDeviceCompleteL()
+ TBool iSearchOngoing;
+ TBool iIsConnectDevice;
+ MBtuiPluginViewActivationObserver* iActivationObserver; // view activation observer
+ TBool iIsAlreadyConnected; // used only for showing "Connected to" note once for Stereo device
+ TBTDevice iMenuDevice;
+ CEikMenuPane* iActiveMenuPane;
+ CBTUIActive* iActive; // used for subscribing notifier lock status
+ TBTDevAddr iPairConnectAddr; // the address of the just paired device
+ // with which a connection establishment is pending
+ TBool iIsPairConnect; // if we are doing auto-connecting after pairing or not
+
+};
+
+#endif
+
+