1 /* |
|
2 * Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies). |
|
3 * All rights reserved. |
|
4 * This component and the accompanying materials are made available |
|
5 * under the terms of "Eclipse Public License v1.0" |
|
6 * which accompanies this distribution, and is available |
|
7 * at the URL "http://www.eclipse.org/legal/epl-v10.html". |
|
8 * |
|
9 * Initial Contributors: |
|
10 * Nokia Corporation - initial contribution. |
|
11 * |
|
12 * Contributors: |
|
13 * |
|
14 * Description: The view that handles paired devices. |
|
15 * |
|
16 */ |
|
17 |
|
18 #ifndef BTUIPAIREDDEVICESVIEW_H |
|
19 #define BTUIPAIREDDEVICESVIEW_H |
|
20 |
|
21 #include <aknview.h> |
|
22 #include <eikmenup.h> // Menu pane definitions |
|
23 #include <AknWaitDialog.h> |
|
24 #include <AknQueryDialog.h> |
|
25 #include <btengconstants.h> |
|
26 #include <btengdiscovery.h> |
|
27 #include "BtuiPluginInterface.h" |
|
28 #include "btdevmodel.h" |
|
29 #include "BTUIListedDevicesView.h" |
|
30 #include "btuipluginman.h" |
|
31 #include "BTUIActive.h" |
|
32 #include <SecondaryDisplay/BtuiSecondaryDisplayAPI.h> |
|
33 #include <gstabbedview.h> |
|
34 |
|
35 class CAknNavigationControlContainer; |
|
36 class CBTUiDeviceContainer; |
|
37 class CGSTabHelper; |
|
38 class CBTEngSettings; |
|
39 class CBTUIMainView; |
|
40 |
|
41 // if there are more connection that this, it is disallowed to |
|
42 // connect to any device |
|
43 const TInt KBtUiMaxConnections = 6; |
|
44 |
|
45 /** |
|
46 * Paired devicew view of the pluetooth application. |
|
47 * |
|
48 * This view handles lists of paired device and pairing new devices, unpairing devices |
|
49 * and setting previously paired devices as blocked. Also connecting and disconnecting |
|
50 * are done by using this view. |
|
51 * |
|
52 *@lib BTUIPlugin.dll |
|
53 *@since S60 v3.0 |
|
54 */ |
|
55 class CBTUIPairedDevicesView : public CBTUIListedDevicesView, |
|
56 public MBTEngSettingsObserver, |
|
57 public MProgressDialogCallback, |
|
58 public MBTEngSdpResultReceiver, // for bt discovery. SDP is not used |
|
59 public MGSTabbedView, |
|
60 public MBTUIActiveObserver |
|
61 { |
|
62 public: |
|
63 |
|
64 /** |
|
65 * ECOM implementation instantiation function of |
|
66 * interface "CBtuiPluginInterface", to be used by BTUI Application. |
|
67 */ |
|
68 static CBTUIPairedDevicesView* NewL(MBtuiPluginViewActivationObserver* aObserver = NULL); |
|
69 |
|
70 static CBTUIPairedDevicesView* NewLC(CBTUIMainView* aBaseView, CArrayPtrFlat<MGSTabbedView>* aTabViewArray); |
|
71 |
|
72 /** |
|
73 * Symbian 2nd phase constructor. |
|
74 */ |
|
75 void ConstructL(); |
|
76 |
|
77 void ConstructL( CBTUIMainView* aBaseView, CArrayPtrFlat<MGSTabbedView>* aTabViewArray ); |
|
78 |
|
79 /** |
|
80 * Destructor. |
|
81 */ |
|
82 virtual ~CBTUIPairedDevicesView(); |
|
83 |
|
84 /** |
|
85 * From MGSTabbedView: |
|
86 * Creates new icon for tab. Ownership is transferred to client. |
|
87 * @since 3.1 |
|
88 */ |
|
89 CGulIcon* CreateTabIconL(); |
|
90 |
|
91 public: // Functions from base classes |
|
92 |
|
93 /** |
|
94 * From CAknView Returns view id. |
|
95 * @param None. |
|
96 * @return View id. |
|
97 */ |
|
98 TUid Id() const; |
|
99 |
|
100 /** |
|
101 * From CAknView Handles user commands. |
|
102 * @param aCommand A command id. |
|
103 * @return None. |
|
104 */ |
|
105 void HandleCommandL(TInt aCommand); |
|
106 |
|
107 protected: |
|
108 /** |
|
109 * C++ default constructor. |
|
110 */ |
|
111 CBTUIPairedDevicesView (MBtuiPluginViewActivationObserver* aObserver= NULL); |
|
112 |
|
113 private: // Functions from base classes |
|
114 |
|
115 /** |
|
116 * From CAknView Activates view. |
|
117 * @param aPrevViewId Id of previous view. |
|
118 * @param aCustomMessageId Custom message id. |
|
119 * @param aCustomMessage Custom message. |
|
120 * @return None. |
|
121 */ |
|
122 void DoActivateL( const TVwsViewId& aPrevViewId, |
|
123 TUid aCustomMessageId, |
|
124 const TDesC8& aCustomMessage ); |
|
125 |
|
126 /** |
|
127 * From CAknView Deactivates view. |
|
128 * @param None. |
|
129 * @return None. |
|
130 */ |
|
131 void DoDeactivate(); |
|
132 |
|
133 /** |
|
134 * From CAknView Dynamically initialises options menu. |
|
135 * @param aResourceId Id identifying the menu pane to initialise. |
|
136 * @param aMenuPane The in-memory representation of the menu pane. |
|
137 * @return None. |
|
138 */ |
|
139 void DynInitMenuPaneL(TInt aResourceId,CEikMenuPane* aMenuPane); |
|
140 |
|
141 // implemented from MProgressDialogCallback |
|
142 /** This is used to cancel connecting and pairing, if user presses the Cancel-button. |
|
143 * From MProgressDialogCallback Get's called when a dialog is dismissed. |
|
144 * @param aButtonId Id of the pressed button. |
|
145 * @return None. |
|
146 */ |
|
147 void DialogDismissedL( TInt aButtonId ); |
|
148 |
|
149 public: // from MBTDeviceObserver |
|
150 /** |
|
151 * Informs the observer that an error happened in changing device status or a new device added. |
|
152 * @param aErr Symbian error code |
|
153 * @param aDevice the device which is changed. |
|
154 * @param aDevNameArray hold conflicting devices' short names if "AlreadyExist" error happened during "connect" |
|
155 * @return None. |
|
156 */ |
|
157 void NotifyChangeDeviceComplete(const TInt aErr, const TBTDevice& aDevice, |
|
158 const RBTDevNameArray* /*aDevNameArray*/ ) ; |
|
159 /** |
|
160 * Leaving version of NotifyChangeDeviceComplete |
|
161 * @param aErr Symbian error code |
|
162 * @param aDevice the device which is changed. |
|
163 * @param aDevNameArray hold conflicting devices' short names if "AlreadyExist" error happened during "connect" |
|
164 * @return None. |
|
165 */ |
|
166 void NotifyChangeDeviceCompleteL(const TInt aErr, const TBTDevice& aDevice, |
|
167 const RBTDevNameArray* /*aDevNameArray*/ ) ; |
|
168 |
|
169 /** Updates the shown device list. This module will send this list forward |
|
170 * to container that takes care of the actual display of those devices |
|
171 * |
|
172 *@param aDevices all the devices to be shown |
|
173 *@param aSelectedItemIndex currently selected item after refresh. |
|
174 */ |
|
175 void RefreshDeviceList(const RDeviceArray* aDevices,TInt aSelectedItemIndex); |
|
176 |
|
177 private: // From MBTUIActiveObserver |
|
178 |
|
179 /** |
|
180 * Callback to notify that an outstanding request has completed. |
|
181 * @param aActive Pointer to the active object that completed. |
|
182 * @param aId The ID that identifies the outstanding request. |
|
183 * @param aStatus The status of the completed request. |
|
184 */ |
|
185 void RequestCompletedL( CBTUIActive* aActive, TInt aId, |
|
186 TInt aStatus ); |
|
187 |
|
188 /** |
|
189 * Callback to notify that an error has occurred in RunL. |
|
190 * |
|
191 * @param aActive Pointer to the active object that completed. |
|
192 * @param aId The ID that identifies the outstanding request. |
|
193 * @param aStatus The status of the completed request. |
|
194 */ |
|
195 void HandleError( CBTUIActive* aActive, TInt aId, |
|
196 TInt aError ); |
|
197 |
|
198 public: // Operations to devices not containing confirmation queries |
|
199 /** |
|
200 * Sets the current security setting of the device. |
|
201 * Does not ask user about it. |
|
202 * |
|
203 * @param aTrusted ETrue when trusted, EFalse if untrusted. |
|
204 * @return None. |
|
205 */ |
|
206 void ChangeDeviceSecurityL( TBool aTrusted ); |
|
207 |
|
208 /** |
|
209 * Issues prompts to connects to specified accessory. |
|
210 * Connects to it if user andswers yes. |
|
211 * |
|
212 * @param TBTDevice connect to this device |
|
213 * @return None. |
|
214 */ |
|
215 void ConnectL( const TBTDevice& aDevice, TBool aNewWaitNote ); |
|
216 |
|
217 /** |
|
218 * Disconnects from the selected BT Accessory. |
|
219 * |
|
220 * @param None. |
|
221 * @return None. |
|
222 */ |
|
223 void DisconnectL(); |
|
224 |
|
225 /** |
|
226 * Removes iDisconnectQueryDlg created in DisconnectL |
|
227 * |
|
228 * @param None. |
|
229 * @return None. |
|
230 */ |
|
231 void CancelDisconnectQueryDlg(); |
|
232 |
|
233 /** |
|
234 * Disconnects from the selected BT Accessory without query. |
|
235 * |
|
236 * @param None. |
|
237 * @return None. |
|
238 */ |
|
239 void DisconnectWithoutQuery(); |
|
240 |
|
241 /** Checks if there is an active phonecall. |
|
242 *@return ETrue if there is, EFalse otherwise |
|
243 */ |
|
244 TBool CallOnGoing(); |
|
245 |
|
246 |
|
247 /** This is used to create TCallBack to help. This is static, since TCallBack does not |
|
248 * allow instance methods. This is used by BlockDeviceDlgL to add help callback to the query. |
|
249 * |
|
250 * @param aTCoeHelpContext. Must be instance TCoeHelpContext, or NULL. |
|
251 * If this is not specified this will open help about blocked devices. |
|
252 * This is not an instance of TCoeHelpContext, since TCallback does not allow |
|
253 * parameters of other type that TAny*. |
|
254 * @return allways KErrNone. TCallBack does not allow void functions |
|
255 */ |
|
256 static TInt LaunchHelp(TAny *aTCoeHelpContext=NULL); |
|
257 |
|
258 private: //These handle command given by user |
|
259 /** |
|
260 * Asks new nick name for the BT Device from user and |
|
261 * attempt to rename the device. Failures are handled by NotifyChangeDeviceComplete. |
|
262 * |
|
263 * @param None. |
|
264 * @return None. |
|
265 */ |
|
266 void RenameDeviceDlgL(); |
|
267 |
|
268 /** |
|
269 * Asks confirmation for deleting a BT Device from user. |
|
270 * Delete the current device if yes replied yes. |
|
271 * |
|
272 * @param None. |
|
273 * @return None. |
|
274 */ |
|
275 void DeleteDeviceDlgL(); |
|
276 |
|
277 /** |
|
278 * Asks confirmation for deleting all BT devices from user. |
|
279 * Delete the devices if yes replied yes. |
|
280 * |
|
281 * @param None. |
|
282 * @return None. |
|
283 */ |
|
284 void DeleteAllDevicesDlgL(); |
|
285 |
|
286 /** |
|
287 * Initiates the pairing procedure to get a new paired device. |
|
288 * DeviceSearchComplete is called after the dialog is done. |
|
289 * |
|
290 * @param None. |
|
291 * @return None. |
|
292 */ |
|
293 void NewPairedDeviceDlgL(); |
|
294 |
|
295 /** |
|
296 * Asks confirmation for Blocking the selected BT Device. |
|
297 * Blocks the current device if yes replied yes. |
|
298 * |
|
299 * @param None. |
|
300 * @return None. |
|
301 */ |
|
302 void BlockDeviceDlgL(); |
|
303 |
|
304 /**Opens a wait note. |
|
305 * |
|
306 *@param dialog. The dialog object to be used for displaying this note. |
|
307 *@param aNoteResource The resource of the note, not including the text. |
|
308 *@param aNoteTextResource The text resource. The %U if this note is filled up with aDevName. |
|
309 *@param aSec SecondaryDisplaycommand |
|
310 *@param aDevName The dev name filled in aNoteTextResource |
|
311 */ |
|
312 void OpenWaitNoteL(CAknWaitDialog *&dialog,TUint aNoteResource,TUint aNoteTextResource, |
|
313 TSecondaryDisplayBtuiDialogs aSec,const TDesC& aDevName); |
|
314 |
|
315 /** Open Setting view for peripheral devices |
|
316 * |
|
317 * @param None. |
|
318 * @return None. |
|
319 */ |
|
320 void LaunchSettingViewL(); |
|
321 |
|
322 /** Setup device specific menu options |
|
323 * |
|
324 * @param None. |
|
325 * @return None. |
|
326 */ |
|
327 void SetupMenuCmd(TInt aIndex, CEikMenuPane* aMenu); |
|
328 |
|
329 |
|
330 public: // Inherited from MBTEngSdpResultReceiver |
|
331 |
|
332 |
|
333 /** Inherited from MBTEngSdpResultReceiver and implemented as empty, |
|
334 * since this class will not do service searches, only device searches. |
|
335 */ |
|
336 void ServiceSearchComplete( const RSdpRecHandleArray& aResult, |
|
337 TUint aTotalRecordsCount, TInt aErr ) ; |
|
338 /** Inherited from MBTEngSdpResultReceiver and implemented as empty, |
|
339 * since this class will not do attributes seaches, only device searches. |
|
340 */ |
|
341 void AttributeSearchComplete( TSdpServRecordHandle aHandle, |
|
342 const RSdpResultArray& aAttr,TInt aErr ) ; |
|
343 /** Inherited from MBTEngSdpResultReceiver and implemented as empty, |
|
344 * since this class will not do service attribute seaches, only device searches. |
|
345 */ |
|
346 void ServiceAttributeSearchComplete( TSdpServRecordHandle aHandle, |
|
347 const RSdpResultArray& aAttr,TInt aErr ); |
|
348 |
|
349 /** |
|
350 * Provides notification of the result of the discovery of nearby |
|
351 * Bluetooth devices. If a device is selected this class will try to pair it. |
|
352 * |
|
353 * @param aDevice The data structure encapsulates all information |
|
354 * about the selected device. Ownership of the data |
|
355 * structure has not been transfered and is still with |
|
356 * the API client. |
|
357 * This is not TBTDevice that is normally used inside the UI. |
|
358 * @param aErr Error code of the device search operation; KErrNone if |
|
359 * sucessful, KErrCancel if the user cancelled the |
|
360 * dialog, KErrAbort if CBTEngDiscovery::CancelSearchRemoteDevice |
|
361 * was called; otherwise one of the system-wide error codes. |
|
362 */ |
|
363 void DeviceSearchComplete( CBTDevice* aDevice, TInt aErr ); |
|
364 |
|
365 /** |
|
366 * Provides notification of the result of the discovery of nearby |
|
367 * Bluetooth devices and EIR data. If a device is selected this class will try to pair it. |
|
368 * |
|
369 * @since S60 v5.1 |
|
370 * @param aDevice The data structure encapsulates information |
|
371 * about the selected device. |
|
372 * Ownership of the data structure has not been transfered and |
|
373 * is still with the API client. |
|
374 * @param aEirWrapper Contains the EIR data of the remote device. |
|
375 * Ownership of the data structure has not been transfered and |
|
376 * is still with the API client. |
|
377 * @param aErr Error code of the device search operation; KErrNone if |
|
378 * sucessful, KErrCancel if the user cancelled the |
|
379 * dialog, KErrAbort if CBTEngDiscovery::CancelSearchRemoteDevice |
|
380 * was called; otherwise one of the system-wide error codes. |
|
381 */ |
|
382 void DeviceSearchComplete( CBTDevice* aDevice, |
|
383 TNameEntry* aNameEntry, |
|
384 TInt aErr ); |
|
385 |
|
386 private: |
|
387 /** Leaving version of DeviceSearchComplete. |
|
388 * |
|
389 * @param aDevice The data structure encapsulates all information |
|
390 * about the selected device. Ownership of the data |
|
391 * structure has not been transfered and is still with |
|
392 * the API client. |
|
393 * This is not TBTDevice that is normally used inside the UI. |
|
394 * @param aEirWrapper Contains the EIR data of the remote device. |
|
395 * Ownership of the data structure has not been transfered and |
|
396 * is still with the API client. |
|
397 * @param aErr Error code of the device search operation; KErrNone if |
|
398 * sucessful, KErrCancel if the user cancelled the |
|
399 * dialog, KErrAbort if CBTEngDiscovery::CancelSearchRemoteDevice |
|
400 * was called; otherwise one of the system-wide error codes. |
|
401 */ |
|
402 |
|
403 void DeviceSearchCompleteL( CBTDevice* aDevice, |
|
404 TNameEntry* aNameEntry, TInt aErr ); |
|
405 |
|
406 /** Shows 'Disonnect first' note |
|
407 * |
|
408 * @param aDevice |
|
409 */ |
|
410 void ShowDisconnecNoteL(TBTDevice *aDevice); |
|
411 |
|
412 /** |
|
413 * Auto connect to headset after pairing succeeded. |
|
414 * @param aCount the counter of connecting request issuing staring from 0. |
|
415 */ |
|
416 void ConnectIfNeededAfterPairL( TInt aCount ); |
|
417 |
|
418 public: // internal methods for informing operation completes |
|
419 /** |
|
420 * Informs that pairing attempt of a device has been completed. |
|
421 * Dismisses wait note and displays questions about authorizing and |
|
422 * connecting, if the device is connectable. |
|
423 * |
|
424 * This method is called by ModifyDeviceChangeL. This method will not inform |
|
425 * iContainer about the pairing since that is done by ModifyDeviceChangeL. |
|
426 * |
|
427 * @param aError Status code of the operation. |
|
428 * @param aDeviceIndex the new place of the device in UI |
|
429 * @return None. |
|
430 */ |
|
431 void BondingCompleteL( TInt aError,const TBTDevice& aDevice); |
|
432 |
|
433 /** Informs that attempt to connect to a device is completed. Closes wait |
|
434 * note and if there was an error shows the error notice. |
|
435 * |
|
436 * This method is called by ModifyDeviceChangeL. This method will not inform |
|
437 * iContainer about the pairing since that is done by ModifyDeviceChangeL. |
|
438 * |
|
439 * @param aError KErrNone or system wide error code |
|
440 * @param aDeviceIndex The index of the new device |
|
441 * @param aConflictingDeviceName this is filled only when |
|
442 */ |
|
443 void ConnectCompleteL(TInt aError,const TBTDevice& aDevice, |
|
444 const RBTDevNameArray* aConflictingDeviceNames=NULL); |
|
445 |
|
446 |
|
447 /** |
|
448 * From MBTEngSettingsObserver - Called when powerstate is changed |
|
449 * @param TBTPowerStateValue power state |
|
450 * @return None |
|
451 */ |
|
452 void PowerStateChanged( TBTPowerStateValue aState ); |
|
453 |
|
454 /** |
|
455 * From MBTEngSettingsObserver - Called when visibility is changed |
|
456 * @param TBTPowerStateValue state of visibility mode |
|
457 * @return None |
|
458 */ |
|
459 void VisibilityModeChanged( TBTVisibilityMode aState ); |
|
460 |
|
461 |
|
462 private: // Data |
|
463 |
|
464 CAknWaitDialog* iWaitForPairingDlg; // Wait note for pairing |
|
465 CAknWaitDialog* iWaitForConnectDlg; // Wait note for connecting to BT Accessory |
|
466 CAknQueryDialog* iDisconnectQueryDlg; // Question dialog for disconnecting BT Accessory |
|
467 TBool iHelpEnabled; // Flag for the Help feature |
|
468 |
|
469 // these are needed so these are owened by someone |
|
470 // and can be cleaned up, in case the operations are interrupted by the user. |
|
471 CBTDevice* iPairingDevice; |
|
472 TNameEntry iPairingDevNameEntry; |
|
473 TBTDevice* iConnectDevice; //device we are trying to connect to |
|
474 TBTDevice iDisconnectQueryDevice; //device we are trying to disconnect |
|
475 |
|
476 CBTEngDiscovery* iDeviceSearcher; // used only for searching devices, not for device discovery |
|
477 CBTEngSettings* iBtEngSettings; // used only for turning on bluetooth, |
|
478 CBTUIPluginMan* iBTPluginMan; |
|
479 CGSTabHelper* iTabHelper; |
|
480 CBTUIMainView* iBaseView; |
|
481 TBool iConstructAsGsPlugin; // Flag that indicate this obj is served as GS plugin not BTUI app's plugin. |
|
482 TInt iExpectedCallBack; // In case of DeleteAll, counter for expected callback NotifyChangeDeviceCompleteL() |
|
483 TBool iSearchOngoing; |
|
484 TBool iIsConnectDevice; |
|
485 MBtuiPluginViewActivationObserver* iActivationObserver; // view activation observer |
|
486 TBool iIsAlreadyConnected; // used only for showing "Connected to" note once for Stereo device |
|
487 TBTDevice iMenuDevice; |
|
488 CEikMenuPane* iActiveMenuPane; |
|
489 CBTUIActive* iActive; // used for subscribing notifier lock status |
|
490 TBTDevAddr iPairConnectAddr; // the address of the just paired device |
|
491 // with which a connection establishment is pending |
|
492 TBool iIsPairConnect; // if we are doing auto-connecting after pairing or not |
|
493 |
|
494 }; |
|
495 |
|
496 #endif |
|
497 |
|
498 |
|