--- a/bluetoothengine/btnotif/btnotifsrv/src/btnotifdeviceselector.cpp Fri May 28 17:03:06 2010 +0300
+++ b/bluetoothengine/btnotif/btnotifsrv/src/btnotifdeviceselector.cpp Mon Jul 12 18:51:05 2010 +0300
@@ -26,6 +26,8 @@
#include "btnotifserver.h"
#include "btnotificationmanager.h"
#include "btnotifclientserver.h"
+// Key description length
+const TInt KMaxKeyDesCLength = 20;
// ======== MEMBER FUNCTIONS ========
@@ -187,8 +189,8 @@
devParams().SetDeviceClass(iDevices[val]->Device().DeviceClass());
devParams().SetDeviceName(iDevices[val]->Alias());
err = iMessage.Write( EBTNotifSrvReplySlot, devParams );
+ iNotification->RemoveObserver();
iNotification->Close(); // Also dequeues the notification from the queue.
- iNotification->RemoveObserver();
iNotification = NULL;
}
iMessage.Complete( err );
@@ -208,8 +210,8 @@
}
else if(aData.Keys().MdcaPoint(0).Compare(_L("MoreDevices"))==KErrNone)
{
+ iNotification->RemoveObserver();
iNotification->Close(); // Also dequeues the notification from the queue.
- iNotification->RemoveObserver();
iNotification = NULL;
iDevices.ResetAndDestroy();
TRAP_IGNORE( {
@@ -243,8 +245,13 @@
CBtDevExtension* devext = CBtDevExtension::NewLC( aAddr, aName );
iDevices.AppendL( devext );
CleanupStack::Pop( devext );
+
+ if(iNotification)
+ {// conditional check required as CAdvanceDevDiscoverer sends discovered devices at times
+ // even after canceldiscovery is issued and notification is set to NULL
+ // this causes EExcDataAbort
CHbSymbianVariantMap* map = iNotification->Data();
- TBuf<8> keyStr;
+ TBuf<KMaxKeyDesCLength> keyStr;
CHbSymbianVariant* devEntry;
keyStr.Num( TBluetoothDialogParams::EDialogExt + iDevices.Count() - 1 );
@@ -252,6 +259,7 @@
CHbSymbianVariant::EDes );
map->Add( keyStr, devEntry );
iNotification->Update();
+ }
}
// ---------------------------------------------------------------------------
@@ -262,10 +270,11 @@
{
(void) aErr;
CHbSymbianVariantMap* map = iNotification->Data();
- TBuf<25> keyStr;
+ TBuf<KMaxKeyDesCLength> keyStr;
//TODO compile fail here we need to send the discovery completed text to the dialog
+ //TODO change the hardcoded string
keyStr.Copy(_L("Search Completed"));
CHbSymbianVariant* devEntry( NULL );
TRAP_IGNORE( devEntry = CHbSymbianVariant::NewL( (TAny*) &(keyStr),
@@ -345,6 +354,11 @@
TBTDialogResourceId aResourceId )
{
BOstraceFunctionEntry0( DUMMY_DEVLIST );
+ if(iNotification)
+ {
+ iNotification->RemoveObserver();
+ iNotification = NULL;
+ }
iNotification = iServer.NotificationManager()->GetNotification();
User::LeaveIfNull( iNotification ); // For OOM exception, leaves with KErrNoMemory
iNotification->SetObserver( this );
@@ -367,7 +381,7 @@
{
iDevices.AppendL( devArray[i]->CopyL() );
CHbSymbianVariantMap* map = iNotification->Data();
- TBuf<8> keyStr;
+ TBuf<KMaxKeyDesCLength> keyStr;
CHbSymbianVariant* devEntry;
keyStr.Num( TBluetoothDialogParams::EDialogExt + iDevices.Count() - 1 );