diff -r 613943a21004 -r 9386f31cc85b bluetoothengine/btnotif/inc/btninqui.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/bluetoothengine/btnotif/inc/btninqui.h Wed Sep 01 12:20:04 2010 +0100 @@ -0,0 +1,383 @@ +/* +* Copyright (c) 2002 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: Declares Bluetooth device inquiry user interface class. +* +*/ + + +#ifndef BTNINQUI_H +#define BTNINQUI_H + +// INCLUDES + +#include // Bluetooth notifiers API +#include // For array handling +#include +#include "btnotifactive.h" // Active Object Helper class for inquiry +#include +#include +#include "btnotifier.h" + +const TInt KPeriodicTimerInterval4Sec(4000000); + + +// FORWARD DECLARATIONS + +class CAknStaticNoteDialog; +class CAknSingleGraphicPopupMenuStyleListBox; +class CAknPopupList; +class CAknQueryDialog; +class CBTInqNotifier; + +// CONSTANTS +enum TSearchFlowState + { + ESearchCompleted, // search completed for any reason, end of UI flow. + ESearchAgain, // no device found, user wants to search again. + ESearchFirstDeviceFound, // the first device is found, show found device list. + }; + +// CLASS DECLARATION +/** + * Class MBTNDeviceSearchObserver + * + * Callback class to notify device searching completed. + */ +class MBTNDeviceSearchObserver + { +public: + + /** + * Callback to notify that the device search request has completed. + * + * @since S60 5.1 + * @param aErr Error code + * @param aDevice Pckgbuf to retrieve the response from the device selection. + */ + virtual void NotifyDeviceSearchCompleted(TInt aErr, + const TBTDeviceResponseParams& aDevice = TBTDeviceResponseParams()) = 0; + }; + +/** +* A helper class used in Bluetooth device search. +* This class is responsible of the UI activity. +*/ +NONSHARABLE_CLASS(CBTInqUI) : public CBase, public MBTEngDevManObserver, public MBTNotifActiveObserver + { + public: // Constructor and destructor + /** + * C++ default constructor. + */ + CBTInqUI( MBTNDeviceSearchObserver* aObserver, + CBTNotifUIUtil* aUtil, const TBTDeviceClass& aDesiredDevClass); + + /** + * The 2nd phase constructor is required to do Asyncronous operations, + * So the readiness of the CBTInqUI is notified Asynchronously to the caller + */ + void ConstructL(); + + /** + * Destructor. + */ + virtual ~CBTInqUI(); + + public: // New functions + + /** + * Cancels all inquiry activity. + */ + void Cancel(); + + /** + * Issues a device inquiry request. + * @param None. + * @return None. + */ + void IssueRequestL(); + + /** + * Check if Eir device name available. + * @param TNameEntry Decode it to get device name + * @param TBTDeviceName Device name returned + * @param TBool Is the name returned complete + * @return ETrue if Eir data contains name. + */ + static TBool CheckEirDeviceName( TNameEntry& aEntry, TBTDeviceName& aName, TBool& aIsComplete ); + + private: // Functions from base classes + + /** + * From MBTNotifActiveObserver + */ + void RequestCompletedL( CBTNotifActive* aActive, TInt aId, TInt aStatus ); + + /** + * From MBTNotifActiveObserver + */ + void HandleError( CBTNotifActive* aActive, TInt aId, TInt aError ); + + /** + * From MBTNotifActiveObserver + */ + void DoCancelRequest( CBTNotifActive* aActive, TInt aId ); + + /** + * From MBTEngDevManObserver + */ + void HandleGetDevicesComplete(TInt aErr, CBTDeviceArray* aDeviceArray); + + /** + * From MBTEngDevManObserver + */ + void HandleDevManComplete(TInt aErr); + + + private: + + /** + * Create the device search active object and prepare for search. + */ + void CreateScannerL(); + + /** + * Removes the device search active object if it still exists. + * @param None. + * @return None. + */ + void RemoveScanner(); + + /** + * Retrieves paired devices from BT Registry + * Calls HandleGetDevicesComplete, when done + */ + void RetrievePairedDevices(); + + /** + * Retrieves used devices from BT Registry + * Calls HandleGetDevicesComplete, when done + * @return None. + */ + void RetrieveUsedDevices(); + + /** + * Searches given BT Device from device array. + * @param aDeviceArray The device array to search in + * @param aDevice The device to be searched. + * @return Index of the device if found. + */ + TInt LookupFromDevicesArray( const CBTDeviceArray* aDeviceArray, const CBTDevice* aDevice ) const; + + /** + * Constructs a device popup list from resources. + * @param aSoftkeysResourceId Resource id for softkeys of the list. + * @param aTitleResourceId Resource id for the title of the list. + * @return None. + */ + void CreatePopupListL(TInt aSoftkeysResourceId, TInt aTitleResourceId ); + + /** + * Generates a format string and adds it to iDeviceItems array. + * Updates friendly name of given device if one is found from registry. + * @param aDevice The device to be added to list. + * @param aSignalStrength The signal bar for RSSI + * @return None. + */ + void AddToDeviceListBoxL(CBTDevice* aDevice, const TInt aSignalStrength = 0 ); + + /** + * Creates and adds local bitmap to icon array. + * @param aID Item ID of the masked bitmap to be created. + * @param aFilename Filename to be used to construct the item. + * @param aBitmapId The ID if bitmap + * @param aMaskId The ID of bitmap's mask + * @param aIconList The icon list for BT devices listbox. + */ + void CreateAndAppendIconL( const TAknsItemID& aID, + const TDesC& aFileName, + const TInt aBitmapId, + const TInt aMaskId, + CAknIconArray* aIconList); + + /** + * Adjust array, leave 5 lastet used devices in the array and remove the rest, + * and then insert the paired device array to this array by used time order. + * In the adjusted array, the first item will be the most lately used device. + * @param aDevArray The bluetooth device arrary to be adjusted. + * @return None. + */ + void AdjustDeviceArrayL( CBTDeviceArray* aDevArray); + + /** + * Filter for searching device + * @param The desired device class user selects from the filter + * @return User's input select/cancel + */ + void SelectSearchCategoryL(); + + /** + * Add filtering items to search device filter + * @param aResourceId + * @return None + */ + void AddItemToSearchFilterL ( TInt aResourceId ); + + /** + * Show query to ask if unblock device + * @param aDevice Selected device + * @return Keypress value + */ + TInt QueryUnblockDeviceL(CBTDevice* aDevice); + + /** + * The callback function for CPeriodic + * to reset the inactivity time + */ + static TInt PeriodicTimerCallBack(TAny* /*aAny*/); + + void GetColorIconL( TFileName& aFilename, TAknsItemID aItemID, TInt aPic, TInt aPicmask, CAknIconArray* aIconList ); + + /** + * Check if VoIP call is ongoing via WLAN connection. + * @return true if it is; false otherwise. + */ + TBool IsActiveVoIPOverWLAN(); + + void DoDeviceFrontListSelection(); + + /** + * Displays previous inquiry results. + */ + void DisplayDevicesFrontListL(); + + /** + * Unblock device after unblock query. + * @param aIndex Parameter containing information about selected device. + * @return Symbian OS error code. + */ + TInt UnblockDevice(TInt aIndex); + + void DeviceSearchUiL(); + + /** + * the initiator of inquiry until the first device found, or no device found, or + * other reasons causing inquiry stopped. + * @param aReason the reason of the search completion + */ + TSearchFlowState InitInquiryL(TInt& aReason); + + void HandleDeviceSelectionL(CBTDevice* aDev); + + /** + * Adds found Bluetooth device into popup list. + * @param aInquiryResultRecord TNameEntry and flag, which indicates if Eir device. + */ + void DeviceAvailableL( const TNameRecord& aNameRecord, const TDesC& aDevName, TBool aIsNameComplete ); + + /** + * The inquiry has been completed. + * @param aError Status code of the operation. + * @return None. + */ + void InquiryComplete( TInt aError ); + + /** + * Inform the caller of the properties of found BTdevice, + * which passes the search filter. Its name will be retrived later + */ + void HandleInquiryDeviceL(); + + /** + * Name lookup complete for the current device in the unnamed devices queue. + */ + void HandleFoundNameL(); + + /** + * Name lookup complete for device aLastSeenIndex in the last seen array + * (this is done for devices with partial names returned by EIR). + */ + void HandleUpdatedNameL(TInt aLastSeenIndex); + + /** + * Allow/Disallow dialer and app key presses. + * @param aAllow ETrue to allow key press; EFalse to disallow. + */ + void AllowDialerAndAppKeyPress( TBool aAllow ); + + /** + * Update the inquiry list box with a new (complete) device name + * (this is done for devices with partial names returned by EIR). + */ + void DeviceNameUpdatedL(const TNameRecord& aNameRecord, TInt aLastSeenIndex); + void DeviceUpdatedL(TInt aSignalStrength, TInt aLastSeenIndex); + + /** + * React to page timeout on a device that's already in the inquiry list box + * (which can happen for devices with partial names returned by EIR). + */ + void PageTimeoutOnDeviceWithPartialNameL(TInt aLastSeenIndex); + + void FormatListBoxEntryL(CBTDevice& aDevice, const TInt aSignalStrength, TPtr aFormatString); + + TBool HaveDevsWithPartialName(TInt& aFirstFoundIndex); + + private: // Data + CBTNotifUIUtil* iUiUtil; + CBTDeviceArray* iLastSeenDevicesArray; // Last seen devices array from BTInqNotifier + RArray iLastSeenDevicesNameComplete; // Is the name in corresponding cell of iLastSeenDevicesArray complete ? + CBTDeviceArray* iLastUsedDevicesArray; // Used devices from BT registry + CBTDeviceArray* iPairedDevicesArray; // Paired devices from Bluetooth registry + CBTDeviceArray* iAdjustedUsedDeviceArray; // 5 Lately used devices + All the Paired devices + CBTEngDevMan* iDevMan; //Async deviceHandler + + CDesCArray* iDefaultDeviceNamesArray; // Default device names array + CEikonEnv& iEikonEnvRef; // Reference to eikonenv + + CAknPopupList* iDevicePopupList; // Popup list for devices + CDesCArrayFlat* iDeviceListRows; // Array for device list format string rows + CAknSingleGraphicPopupMenuStyleListBox* iDeviceListBox; // ListBox for bluetooth devices + CAknPopupList* iSearchFilterPopupList; + + CBTNotifActive* iScanner; + + TBool iDevicesFound; // Flag if any devices has been found + TBool iInquiryComplete; + TBool iBroughtForwards; // Flag for BringForwards + TInt iInquiryStatus; // Error code from inquiry result + + TBTRegistryQueryState iBTRegistryQueryState; // which registry query (if any) is in progress. + TBTDeviceClass iDesiredDeviceClass; // Device Class user selects from search filter + CPeriodic* iPeriodicTimer; // the timer for reseting the user inactivity time + TBool iSystemCancel; // Used for a trick to avoid final device list is still on show + // while taking out mmc during BT device discovery + TBTDeviceResponseParams iDevParams; + TInt iHighLightedItemIndex; + + RSocketServ iSocketServer; // Socket server object + RHostResolver iHostResolver; // Host resolver object + TInquirySockAddr iInquirySockAddr; // Socket address record + TNameEntry iEntry; // Inquiry results record + TBool iPageForName; // Flag for inquiry name + RArray iDevsWithoutName; // Devices without dev name + TInt iCurrentlyResolvingUnnamedDeviceIndex; // Current btdevice to inquiry its name + MBTNDeviceSearchObserver* iDevSearchObserver; + + TBool iExcludePairedDevices; + + + }; + +#endif + +// End of File