diff -r 000000000000 -r f63038272f30 bluetoothengine/btui/Ecom/inc/BTUIPairedDevicesView.h --- /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 +#include // Menu pane definitions +#include +#include +#include +#include +#include "BtuiPluginInterface.h" +#include "btdevmodel.h" +#include "BTUIListedDevicesView.h" +#include "btuipluginman.h" +#include "BTUIActive.h" +#include +#include + +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* aTabViewArray); + + /** + * Symbian 2nd phase constructor. + */ + void ConstructL(); + + void ConstructL( CBTUIMainView* aBaseView, CArrayPtrFlat* 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 + +